Showing events on your own website (event feed)

You can release individual events to a public, key-less JSON feed and use it to power your own website's event calendar — including a from-price and a sold-out flag.

If you want to show your events on your own website — in your own design, not as an embedded Univents page — you can release individual events for that. Univents then serves them through a public, read-only feed that your website (or your agency's) can fetch and render itself.

Showing an event on your website

The release happens directly on the event, not in one central place:

  1. Open the event you want to show.
  2. Click the Show on website toggle in the header of the detail view.
  3. Univents saves the change immediately and confirms with a brief message.

Once the toggle is on, the event shows up in the feed within a few minutes. Turning it off again, or deleting the event, removes it from the feed just as automatically. The toggle only affects that one event — there's no bulk release for all events at once.

What's in the feed

The feed only returns fields meant for a public calendar display: title, description, start and end time, whether the date is already confirmed, venue, header image, tags, a link to ticket sales (if the event has a ticket-sale booking page), plus the cheapest ticket price still on sale and a sold-out flag. Internal data like budget, guest count, notes, contact details, status, or finance data is never included in the feed, regardless of whether the event is public. Capacities, ticket-category names and sales figures stay inside as well — all that leaves the system is the price and a yes/no on sold out.

From-price and sold out

If you sell tickets through Univents, the feed carries two extra values your website can turn into a “from €25” label and a “sold out” badge:

  • price_from — the cheapest ticket price a visitor can still buy right now, as a gross amount (the same number the ticket shop shows on that category). Once your cheapest category is gone, the next one up takes over automatically. That way your website never promises a price the shop no longer has.
  • price_from_currency — your workspace's currency code, e.g. EUR or CHF.
  • tickets_sold_outtrue as soon as no ticket category is buyable any more. As long as any category still has tickets, it stays false, even if individual categories are already full.

When everything is sold out, price_from is empty (null) — a from-price next to “sold out” would invite a purchase that isn't possible. An event without ticket sales returns price_from: null and tickets_sold_out: false: it sells nothing, so it cannot be sold out.

If you void a ticket, its seat is freed immediately — the category becomes buyable again and reappears in the from-price. Because the feed is briefly cached, an event that has just sold out can still show as available on your website for a few minutes.

Image and description: the event, not the ticket page

Your website calendar uses the image and description of the event itself — the ones you maintain on the event under Appearance. The image and description of a booking or ticket page belong to that page and do not travel to the website calendar automatically. That is deliberate: many businesses deliberately show a different picture in the ticket shop than in the calendar on their own website.

If you want both to match, you say so once:

  1. Open the booking or ticket page and go to the Details section.
  2. Below the image and description you will find the note and the button Apply to the website calendar too.
  3. Confirm the prompt. The image and description of the page are then copied to the linked event, overwriting whatever was stored there before.

The button only appears when the page is linked to an event (which is always the case for ticket pages). The last saved state of the page is used, and fields that are empty on the page stay unchanged on the event — so an empty page never deletes an image. It can take a few minutes until the change reaches your website calendar, because the feed is briefly cached.

Fetching the feed

The feed is public and reachable without login or an API key — a website or external tool can load it directly via fetch:

GET https://univents.app/api/public/your-workspace/events
GET https://univents.app/api/public/your-workspace/events/{eventId}

your-workspace is your workspace's slug, which you can also find in your computer's address bar after /home/. Use the from and to parameters to narrow the time range, and limit to cap the number of results (default 50, max 100). limit is rounded to one of three steps — 25, 50, or 100 — so the cache only has to handle a handful of variants: any value you request is rounded up to the next step, so ?limit=10 returns 25 entries just like ?limit=25, and anything above 100 is capped at 100. Without any parameters, the feed returns every released event from today onward.

A sample response looks like this:

{
  "workspace": "your-workspace",
  "count": 2,
  "events": [
    {
      "id": "…",
      "title": "Summer concert",
      "description": "…",
      "start": "2026-08-20T18:00:00Z",
      "end": "2026-08-20T23:00:00Z",
      "date_is_confirmed": true,
      "venue": "Main hall",
      "image_url": "https://…",
      "tags": ["Concert"],
      "ticket_url": "https://univents.app/book/your-workspace/your-page",
      "price_from": 25,
      "price_from_currency": "EUR",
      "tickets_sold_out": false,
      "updated_at": "2026-08-05T09:00:00Z"
    }
  ]
}

For developers and agencies

The feed is deliberately built to drop straight into an existing website without managing credentials:

  • No auth, no API key — the route is publicly reachable, but only ever returns events for that workspace that have the toggle switched on.
  • CORS is open, so a fetch call works directly from any website's browser.
  • Cached — responses are cacheable for a short time (a few minutes) to keep frequent lookups fast. A newly released event therefore doesn't appear instantly, but within a few minutes.
  • Rate-limited — a very high number of requests in a short time from the same source gets an error response instead of empty data; this isn't relevant for normal website traffic.
  • An unknown workspace slug returns an error, not an empty list — so you notice right away if the slug is wrong.

Frequently asked questions

Does the feed also show locations that are booked but not switched to public? No. The feed only shows events for which you've explicitly turned on Show on website — never your general location occupancy.

Does the feed include prices? One: the cheapest ticket price still on sale (price_from, gross) plus its currency. The full price list still lives only on the booking page that ticket_url points to.

Why does my website show a higher price than yesterday? Because the cheaper category has sold out since. The feed always names the cheapest price you can still buy — not the cheapest that ever existed.

Why doesn't my event without tickets say “sold out”? Because it doesn't sell tickets. tickets_sold_out is only true when there is a ticket sale and nothing is left in it.

Do I have to release every event individually? Yes, there's currently no bulk release. The toggle deliberately sits on each event individually, so you keep full control over what's publicly visible.

Is this feature tied to a specific plan? The feed only ever shows what you release yourself — there are no additional requirements beyond your normal event permissions.

Does calling the feed cost me anything? No, the feed is a read-only view of data you've already released — there are no separate costs for it.

Univents newsletter

Product news and practical tips for event and catering businesses. Roughly once a month, no more.