API Reference
The Entrello API is a RESTful API that provides public access to event data and contact subscription. All responses are returned in JSON format. The event endpoints are publicly accessible and require no authentication; the contact subscription endpoint requires an API key (see Subscribe a contact).
All API requests should be made to the base URL. Dates are returned in RFC 3339 format. Monetary values are in cents.
Base URL
https://entrello.app/api/events
Content Type
All responses use application/json.
Authentication
The event endpoints require no authentication; access is scoped by the organization slug in the URL. The contact subscription endpoint additionally requires a valid X-API-Key header.
curl https://entrello.app/api/events/?slug=my-org
List events
Returns a list of events for the organization. Events that share the same
sync_id are grouped together, with additional dates returned
in the dates array. This is the primary endpoint for building
event listing pages.
/events
"true" or "false"."true" or "false"."en", "de") to apply translations to event title, description, and location.YYYY-MM-DD. Matched against
starts_at from the start of that day in the organization's timezone,
so the given day is included. Replaces the default lower bound of “now”;
to reach into the past, combine it with archived=true, otherwise events
whose sale has already closed stay filtered out.
YYYY-MM-DD. Matched against
starts_at up to the end of that day in the organization's timezone,
so the given day is included.
0 = available, 0.9 = nearly sold out, 1.0 = completely sold out. See Status Codes & Flags for details.false, the event is hidden from the public listing. See Status Codes & Flags.sold_out = 1.0), customers can join a waiting list. See Status Codes & Flags.psc query parameter matches the event's pre-sale code (case-insensitive).curl https://entrello.app/api/events/?slug=my-org&lang=en
curl https://entrello.app/api/events/?slug=my-org&from=2026-04-01&to=2026-04-30
[ { "id": "evt_abc123", "org_id": "org_xyz", "title": "Hamlet", "description": "A Shakespeare classic...", "subtitle": "by William Shakespeare", "artist": "Royal Theatre Company", "on_sale": true, "soon_on_sale": false, "on_hold": false, "cancelled": false, "hidden": false, "sold_out": 0.45, "starts_at": "2026-04-15T19:30:00Z", "ends_at": "2026-04-15T22:00:00Z", "features": 0, "media_urls": [ { "url": "https://cdn.entrello.com/img/hamlet.jpg", "type": "cover" } ], "dates": [ { "id": "evt_abc124", "title": "Hamlet", "subtitle": "", "starts_at": "2026-04-16T19:30:00Z", "ends_at": null, "on_sale": true, "soon_on_sale": false, "on_hold": false, "cancelled": false, "sold_out": 0.2, "location": null } ], "labels": [ { "id": "lbl_001", "name": "Theatre", "color": "#e25950" } ], "location": { "name": "Grand Theatre", "description": "", "address": { "city": "Vienna", "country": "Austria", "street": "Ringstrasse 1", "postcode": "1010" } }, "settings": { ... }, "seating_plan": null, "available_languages": ["en", "de"], "pre_sale_code": null } ]
List events (flat)
Returns a flat list of events without grouping by sync_id.
Each event is returned as an individual record. Unlike /events,
synced events are not grouped together and the dates
array will be empty.
Use this endpoint when you need individual event records without date grouping, for example when building calendar views.
/events/flat
"true" or "false"."true" or "false".YYYY-MM-DD. Behaves exactly as on
List events.
YYYY-MM-DD. Behaves exactly as on
List events.
Returns an array of Event objects with the same structure as
List events,
except that the dates array is always empty.
Each synced event appears as its own entry.
curl https://entrello.app/api/events/flat?slug=my-org
curl https://entrello.app/api/events/flat?slug=my-org&from=2026-04-01&to=2026-04-30
[ { "id": "evt_abc123", "org_id": "org_xyz", "title": "Hamlet", "description": "A Shakespeare classic...", "subtitle": "by William Shakespeare", "artist": "Royal Theatre Company", "on_sale": true, "soon_on_sale": false, "cancelled": false, "sold_out": 0.45, "starts_at": "2026-04-15T19:30:00Z", "ends_at": "2026-04-15T22:00:00Z", "dates": [], "labels": [...], "location": {...}, "settings": {...}, ... }, { "id": "evt_abc124", "title": "Hamlet", "starts_at": "2026-04-16T19:30:00Z", "dates": [], ... } ]
Retrieve an event
Retrieves a single event by its ID with full details. If the event belongs to
a sync group, all other dates in the group are included in the dates array.
/events/{id}
pre_sale_code.approved field in the response indicates whether the code was accepted.dates array. Default: 100.
Returns a single Event object with the same structure as
described in List events.
The dates array contains all other events sharing the same sync_id.
If the event has a pre-sale code, the pre_sale_code object will be present:
psc query parameter matches the event's pre-sale code (case-insensitive).curl https://entrello.app/api/events/evt_abc123?lang=en
curl https://entrello.app/api/events/evt_abc123?psc=EARLY2026
{ "id": "evt_abc123", "org_id": "org_xyz", "title": "Hamlet", "description": "A Shakespeare classic...", "subtitle": "by William Shakespeare", "artist": "Royal Theatre Company", "on_sale": true, "soon_on_sale": false, "on_hold": false, "cancelled": false, "hidden": false, "sold_out": 0.45, "starts_at": "2026-04-15T19:30:00Z", "ends_at": "2026-04-15T22:00:00Z", "features": 0, "media_urls": [ { "url": "https://cdn.entrello.com/img/hamlet.jpg", "type": "cover" } ], "dates": [ { "id": "evt_abc124", "title": "Hamlet", "subtitle": "", "starts_at": "2026-04-16T19:30:00Z", "ends_at": null, "on_sale": true, "soon_on_sale": false, "on_hold": false, "cancelled": false, "sold_out": 0.2, "location": null } ], "labels": [ { "id": "lbl_001", "name": "Theatre", "color": "#e25950" } ], "location": { "name": "Grand Theatre", "description": "", "public_transport": ["U1 Karlsplatz"], "has_wheelchair_access": true, "has_bar_on_site": true, "has_restaurant_on_site": false, "address": { "city": "Vienna", "country": "Austria", "street": "Ringstrasse 1", "postcode": "1010" } }, "settings": { "basic_settings": { "max_qty_per_order": 10, "close_sale_after_perc": 1.0, "require_ticket_holder_name": false, "available_concessions": [] }, "webshop_settings": { "is_visible": true, "waiting_list": false, "reservations": false, "seating_plan_enabled": true } }, "seating_plan": null, "available_languages": ["en", "de"], "pre_sale_code": { "required": true, "approved": true } }
Subscribe a contact
Subscribes a contact to the organization's newsletter using a double opt-in flow. This endpoint does not subscribe the contact immediately — instead it sends a confirmation email to the provided address. The subscription is only activated once the recipient clicks the confirmation link in that email.
If a contact with the given email does not yet exist, it is created. If the contact is already subscribed to the newsletter, the request fails. To prevent abuse, repeated requests for the same email within the confirmation-email cooldown window are silently accepted without sending another email.
Authentication. Unlike the event endpoints, this endpoint
requires a valid API key supplied in the X-API-Key request header.
Requests with a missing or invalid key are rejected with
401 Unauthorized.
/{org_slug}/contacts/subscribe
city or country is supplied, an invoice address is created or updated for the contact.city or country is supplied, an invoice address is created or updated for the contact.
Returns 200 OK with an empty body once the confirmation email has
been queued. A 401 Unauthorized is returned when the X-API-Key
header is missing or invalid. A 400 Bad Request is returned when the body
is invalid (for example a missing or malformed email), and an error is
returned if the contact is already subscribed.
curl -X POST https://entrello.app/api/my-org/contacts/subscribe \ -H "X-API-Key: your-api-key" \ -H "Content-Type: application/json" \ -d '{ "email": "jane@example.com", "firstname": "Jane", "lastname": "Doe", "city": "Vienna", "country": "Austria" }'
{ "email": "jane@example.com", "firstname": "Jane", "lastname": "Doe", "city": "Vienna", "country": "Austria" }
// 200 OK — empty body
Event Object
The Event object is the core data structure returned by all event endpoints. It contains comprehensive information about an event including scheduling, availability, settings, location, and media.
Attributes
subtitle, it is shared by every date in the
sync group, detached dates included, so all dates of a production carry the same value.
Translated along with the rest of the event when lang is set.
0, then capped at the event's per-order maximum. It is
deliberately not the real remaining inventory. Always 0 once the event is
sold out or has been forced sold out.
{ "id": "evt_abc123", "org_id": "org_xyz", "title": "Hamlet", "description": "A Shakespeare classic...", "on_sale": true, "soon_on_sale": false, "cancelled": false, "sold_out": 0.0, "starts_at": "2026-04-15T19:30:00Z", "settings": { "webshop_settings": { "is_visible": true, "premiere": true, "waiting_list": false } } }
EventDate Object
A single further occurrence of an event, as returned in the dates array of an
Event. Every entry shares the
parent's sync_id. It is a trimmed-down Event: enough to render and price one
date, without settings, media or a seating plan.
Attributes
/events/{id} to retrieve the full Event.{ "id": "evt_abc124", "title": "Hamlet", "subtitle": "", "starts_at": "2026-04-16T19:30:00Z", "doors_at": "2026-04-16T18:45:00Z", "ends_at": null, "on_sale": true, "on_hold": false, "cancelled": false, "features": 0, "sold_out": 0.2, "available": 8, "location": null }
Location Object
The venue an event is staged at, returned on location of both
Event and
EventDate. Null when the
event has no venue attached.
Attributes
{ "name": "Grand Theatre", "description": "", "public_transport": ["U1 Stephansplatz"], "has_wheelchair_access": true, "has_bar_on_site": true, "has_restaurant_on_site": false, "address": { ... } }
Address Object
A postal address with optional map coordinates, returned on address of a
Location. The contact fields
carry the venue's details and are frequently empty on public event responses.
Attributes
{ "email": "", "phone": "", "firstname": "", "lastname": "", "city": "Vienna", "country": "Austria", "postcode": "1010", "street": "Ringstrasse 1", "street2": "", "coords": { "lat": 48.2082, "lng": 16.3738 }, "zoom_level": 15, "company_name": "", "vat_id": "" }
EventSettings Object
Everything configurable about how an event sells and how it is displayed, returned on
settings of an Event.
Split in two: basic_settings governs the sale itself,
webshop_settings governs presentation. Either may be null.
Attributes
available figure reported on Event.false, the event is hidden from the public listing.sold_out = 1.0), customers can join a waiting list.sold_out to 1.0 and available to 0.{ "basic_settings": { "max_qty_per_order": 10, "close_sale_after_perc": 1.0, "qty_preselected_tickets": 2, "close_sale_min_before_start": 30, "close_products_sale_min_before_start": 60, "require_ticket_holder_name": false, "available_concessions": ["STUDENT"] }, "webshop_settings": { "postponed": false, "restaging": false, "premiere": true, "last": false, "special": false, "is_visible": true, "waiting_list": false, "reservations": false, "reservations_only": false, "waiting_room_limit": 0, "seating_plan_enabled": true, "force_sold_out_message": false, "seating_plan_suggestions_enabled": true, "link_product_orders": false, "time_slots_view": false } }
SeatingPlan Object
The seat map for an event, returned on seating_plan of an
Event and null when the event is
unseated. The plan is delivered as SVG markup you render yourself;
width and height give its natural size so you can scale it without
parsing the markup.
Attributes
{ "id": "spl_001", "width": 1200, "height": 800, "svg": "<svg ...>" }
Label Object
A tag assigned to an event, returned in the labels array of an
Event. Filter a listing down to one
label with the label query parameter on
List events, which matches on
name, case-insensitively.
Attributes
"#e25950".{ "id": "lbl_001", "name": "Theatre", "color": "#e25950" }
MediaURL Object
One image or video attached to an event, returned in the media_urls array of an
Event.
Attributes
"cover".{ "url": "https://cdn.entrello.com/img/hamlet.jpg", "type": "cover" }
PreSaleCode Object
The outcome of checking a pre-sale code, returned on pre_sale_code of an
Event and null when the event has
no code configured. Supply the code as the psc query parameter on
Retrieve an event.
Attributes
psc matched the event's code, compared case-insensitively.{ "required": true, "approved": false }
Status Codes & Flags
Events have various status indicators that control their behavior in the webshop and provide information about their availability and special characteristics.
Availability Status
These fields control whether an event can be purchased.
on_sale
Type: boolean
Description: When true, the event is open for sale on the webshop.
Customers can browse and purchase tickets. This is the primary indicator that an event
is currently available for purchase.
soon_on_sale
Type: boolean
Description: When true, the event will be available for purchase soon.
This typically indicates that the sale period has not yet started, but customers can see
the event in listings and prepare to purchase when it becomes available.
cancelled
Type: boolean
Description: When true, the event has been cancelled.
Cancelled events are typically not available for purchase and may be hidden from the webshop
or displayed with a cancellation notice.
sold_out
Type: number (0.0 to 1.0)
Description: Indicates the sold-out status of the event. This field has special meaning for certain values:
0or0.0- Tickets are available for purchase0.9- Nearly sold out (typically 90% or more tickets sold). This triggers a "Nearly Sold Out" or similar message in the webshop to create urgency1.0- Completely sold out. No tickets are available. Ifwaiting_listis enabled in webshop_settings, customers can join a waiting list- Other values between 0 and 1 represent the percentage of tickets sold
Visibility Control
is_visible
Type: boolean (in settings.webshop_settings)
Description: Controls whether the event appears in the public webshop.
When false, the event is hidden from listings and cannot be accessed by customers.
This is useful for draft events or events that should only be available through direct links.
Waiting List
waiting_list
Type: boolean (in settings.webshop_settings)
Description: Enables the waiting list feature for the event.
When combined with a sold-out event (sold_out = 1.0), customers can join
a waiting list to be notified if tickets become available. This feature is particularly
useful for high-demand events or to capture interest for additional showtimes.
Display Flags
These flags in settings.webshop_settings indicate special occasions or characteristics
of the event. They are purely for display purposes and do not affect the event's behavior or availability.
Use these to highlight special performances in your UI.
premiere
Type: boolean
Description: Indicates this is a premiere performance - the first public showing
of a new production. This flag can be used to display a "Premiere" badge or special styling.
last
Type: boolean
Description: Indicates this is the last performance of a production.
Use this to display a "Last Performance" or "Final Show" badge to create urgency.
special
Type: boolean
Description: Indicates this is a special event - such as a gala, charity performance,
or other unique showing. Use this to highlight the event with special styling or badges.
postponed
Type: boolean
Description: Indicates the event has been postponed from a previous date.
Display this information to inform customers that the event date has changed.
restaging
Type: boolean
Description: Indicates this is a restaging of a previous production.
This helps customers identify productions that have been performed before.
// Available event { "on_sale": true, "sold_out": 0, "cancelled": false } // Nearly sold out event { "on_sale": true, "sold_out": 0.9, "cancelled": false } // Sold out with waiting list { "on_sale": false, "sold_out": 1.0, "cancelled": false, "settings": { "webshop_settings": { "waiting_list": true } } } // Premiere event { "on_sale": true, "settings": { "webshop_settings": { "premiere": true, "is_visible": true } } }