Events spaces

Embed
Preview of the card
<a href="https://forumulate.com/guides/events-spaces"><img src="https://forumulate.com/guides/_api/public/orgs/046a9bc0-d530-43ae-9bae-af7945008cda/spaces/36aa4df0-1e95-4cef-8ae9-795169441345/pages/f5b245a4-bef5-49fe-b32a-df9ff5d6acee/social-card.svg?v=3e7ae33eec8b" alt="Events spaces" width="600" height="315"></a>

When an event happens, and in whose terms

An event carries two facts about its timing, and they answer different questions:

Field

What it is

startsAt (and endsAt)

The instant. Stored as a timestamptz — the same moment for everybody on earth, whatever zone they are reading in.

timezone

The zone the event is published in. An IANA name, e.g. Europe/Berlin. It is what a reader is shown, and what the .ics advertises.

Keeping them separate is what lets "18:00 in Berlin" and "the moment 17:00 UTC" be the same event described two ways.

Setting the time

startsAt and endsAt each accept either form:

# An instant. `timezone` then only affects how it is DISPLAYED.
{ "startsAt": "2026-11-05T17:00:00Z",    "timezone": "Europe/Berlin" }
{ "startsAt": "2026-11-05T18:00:00+01:00" }

# A wall-clock time, resolved by `timezone`. "18:00, Berlin time."
{ "startsAt": "2026-11-05T18:00:00",     "timezone": "Europe/Berlin" }
{ "startsAt": "2026-11-05T18:00",        "timezone": "Europe/Berlin" }

A wall-clock time with no timezone on the event resolves in UTC, which is almost never what you meant — send the zone.

The resolution is DST-correct: a wall-clock time is read with the offset that zone actually had on that date, so an event in March lands where the people in that zone expect it to, not an hour out.

Changing the zone does not move the event

A PATCH that sends only timezone re-labels the event. It does not move it. The event is still happening at the same moment; it is merely being described in another zone — and silently shifting a scheduled event by hours because somebody corrected a label is not a thing software should do.

To actually re-anchor it — "make it 18:00 in the NEW zone" — send both in one request, and the wall-clock time is read in the zone you are setting:

PATCH …/events/{id}
{ "startsAt": "2026-11-05T18:00:00", "timezone": "America/New_York" }

What is refused

Request

Answer

timezone: "Mars/Olympus", or any name this runtime's tz database does not know

422 — "not an IANA time zone name"

startsAt that is neither an instant nor a wall-clock datetime

422, naming both accepted forms

endsAt before startsAt

422 — on a PATCH as well as a POST. A patch that moves one end is checked against the end it is not touching.

The calendar file

GET …/events/{id}/calendar.ics (and the space's feed) emits DTSTART as a UTC instant and advertises the zone at calendar level with X-WR-TIMEZONE.

That is deliberate, and it is the interoperable choice: a TZID parameter on DTSTART is only meaningful alongside a full VTIMEZONE component carrying that zone's DST rules, which would mean shipping and maintaining a copy of the tz database inside every calendar file we emit. A UTC instant is unambiguous to every calendar client, and X-WR-TIMEZONE is what they read to decide which zone to draw the grid in. A feed whose events disagree about their zone advertises none, rather than claiming one of them for all of them.

Addressing an event

GET …/events/{handle} takes either the event's id or its slug. So does the public page and the .ics. (PATCH and the RSVP routes take the id, which is why the read side had to accept both: an event should not have one handle for reading and another for writing.)

What a reader gets

  • The space's own name as the page title — not the word "Events".

  • The space's chrome: header, sign-in, theme toggle, announcement strip, consent and analytics, like every other reader surface.

  • Event structured data, with eventAttendanceMode and Place / VirtualLocation chosen from whether the event has a location, a join link, or both (both is MixedEventAttendanceMode) — never guessed. The event page adds image (share image, then cover), organizer (your site), remaining capacity, and an offers node for the RSVP that reads SoldOut when the event is full. No price is claimed — an RSVP costs nothing; a ticketed event states its own offers through its JSON-LD override (below).

  • The description rendered as Markdown, in both the detail page and the calendar card.

  • RSVP controls only once the viewer is known to be signed in, so a logged-out reader is offered a way in rather than a failed request.

Front page

An events space's front page is a composed document. Until you edit it, it is generated: the intro band, then the events band. An events feed sorts by latest or oldest and filters by when (upcoming or past) and tags — so "Upcoming" on your blog's or your site's front page is one spaceFeed with filter.when: "upcoming".

One event's own look and share card

An event can carry the same per-piece keys as a blog post: CSS for that event's page only, a partial theme over the space's, a share image (it beats the cover), its own og title/description and card type, and its own JSON-LD, which replaces the automatic Event markup. Send them under customization on POST …/events or PATCH …/events/{idOrSlug}; keys merge, and null clears one (or, for the whole object, all of them):

{
  "customization": {
    "shareImageUrl": "/api/assets/…",
    "jsonLd": {
      "@type": "Event",
      "name": "Launch night",
      "startDate": "2026-11-05T18:00:00+01:00",
      "offers": {
        "@type": "Offer",
        "price": "25",
        "priceCurrency": "EUR",
        "url": "https://tickets.example.com/launch"
      }
    }
  }
}

In the console it is Page look & sharing under each event in the events manager.

The keys and their rules are in Theme your site → Per-page customization.


Speakers

A space keeps one registry of speakers, and sessions in an event's programme point at them, so a person who speaks three times is one record. Reading takes forum.read; writing takes forum.moderate.

POST /orgs/{orgId}/spaces/{spaceId}/event-speakers
{
  "name": "Ada Lovelace",
  "title": "Analyst",
  "company": "Analytical Engines",
  "bio": "Wrote the first **program**.",
  "socials": [ { "label": "Mastodon", "url": "https://example.social/@ada" } ],
  "position": 10
}

Only name is required (up to 120 characters). pronouns, title and company take short text or null; bio is Markdown up to 5,000 characters; position orders the speakers page, with ties broken by name; slug is generated unless you give lower-case words joined by hyphens. Create answers 201 with { "speaker": ... }. PATCH the same path plus /{speaker} (id or slug) changes any of the fields, and DELETE removes the speaker.

Promo codes

A promo code takes money off a ticketed event. Managing codes needs forum.moderate.

POST /orgs/{orgId}/spaces/{spaceId}/event-promo-codes
{
  "code": "EARLYBIRD",
  "percentOff": 20,
  "eventId": null,
  "maxRedemptions": 100,
  "expiresAt": "2026-11-01T00:00:00Z",
  "tierIds": []
}

Give exactly one of percentOff (1 to 100) or amountOffCents (minor units off each ticket, never below zero); both or neither is a 422. code is 2 to 40 letters, digits, - or _, and is stored upper-case. eventId: null (or leaving it out) makes the code work for every event in the space; set an id to confine it to one. An empty tierIds means every ticket tier. maxRedemptions and expiresAt are optional limits. The list is GET …/event-promo-codes; PUT …/event-promo-codes/{id} replaces a code with a full body, and DELETE removes it.

What an event mails

Confirmations, reminders and announcements are controlled per space, and any key you leave out falls back to the organization's events.* setting and then to the default (confirm, remind a day and an hour before, send the digest, announce).

PUT /orgs/{orgId}/spaces/{spaceId}/event-notices
{
  "confirmations": true,
  "reminders": ["1d", "1h"],
  "reminderNote": "Doors open at 17:30. Bring photo ID.",
  "organizerDigest": true,
  "announce": false
}

reminders: [] sends none; reminderNote is your own text in every reminder. organizerDigest is a daily mail of new RSVPs to whoever made the event, and announce mails the space's email subscribers when an event is published. GET …/event-notices (space.read) returns the keys you set (stated) and what actually happens (resolved); PUT needs space.update. Reminder leads are 7d, 3d, 1d, 3h, 1h and 15m.

Who is going, and RSVP by email

Three switches in the space's attendance settings decide what readers see, all off until you turn them on: publicAttendees (the event page lists who is going), emailRsvp (a reader with no account may RSVP with an email address) and searchable (the space's events appear in site search).

PUT /orgs/{orgId}/spaces/{spaceId}/event-attendance
{ "publicAttendees": true, "emailRsvp": true, "searchable": false }

GET on the same path (space.read) reads them; PUT needs space.update and a key left out is switched off. The reader-facing calls are public and live under /public/orgs/{orgId}/spaces/{spaceId}:

Call

What it does

GET …/event-attendance

What the RSVP control needs to know (no secrets).

GET …/events/{handle}/attendees

{ going, listed, shown }. shown is only attendees who ticked "show me", never an email. ?limit= caps the faces.

POST …/events/{handle}/rsvp

An email-only RSVP. Mails a link; no seat is held until it is followed.

POST …/events/{handle}/rsvp/confirm

Body { "token": "..." }, the token from the mailed link.

POST …/events/{handle}/rsvp/cancel

Same body; withdraws the RSVP.

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/rsvp
{ "email": "reader@example.com", "name": "Sam", "guests": 1, "showPublicly": false }

email and name are required; answers carries replies to registration questions and captchaToken is checked when the organization uses a captcha. The request is limited to five a minute per caller. Confirming and cancelling are POSTs, not GETs, so mail scanners that follow links cannot do it for the reader.

Privacy for email-only RSVPs

Someone who RSVP'd without an account can still ask for a copy of what is held about their address, or for it to be erased.

POST /public/orgs/{orgId}/spaces/{spaceId}/event-rsvps/privacy
{ "email": "reader@example.com", "kind": "export" }

kind is export or erase. The answer is always 202 { "ok": true }, whether or not the address ever RSVP'd, so a stranger cannot find out. The link goes to the mailbox; following it is POST …/event-rsvps/privacy/confirm { "token": "..." }, which exports or erases every email-only RSVP for that address in the organization.

How the calendar reads: theme.events

Everything about how an events space looks lives under one theme key, theme.events. It layers like every other theme key: the site's theme, then the space's, then one event's own customization (below). Every key is optional, and a key you set always wins over a look, a preset or the default. A misspelt key is a 422 that names it, never a silent default.

PATCH /orgs/{orgId}/spaces/{spaceId}/theme
{ "events": { "look": "ticket", "list": { "pastMode": "tabs" } } }

In the studio this is Design → Events: every setting: every key below has a control there, and clicking a part of the calendar in the studio offers the key that draws it.

Three things stack under your keys, in this order:

  1. The default layer — what a calendar nobody configured looks like: a date tile beside each card with the cover as a square thumbnail, six past events then "All past events", the register card beside the description (sticky, with a bar at the foot of a phone's screen), the facts as tiles, a map card, who is going, "More events", and an "Event time / My time" switch that only appears when the reader's zone differs from the event's.

  2. The preset (settings.preset, chosen at creation, changed with PUT …/preset) — where things stand: standard, luma, community, conference or webinar.

  3. The look (theme.events.look) — how things are dressed.

Looks are patches you can mix

A look sets dress keys only — style, chips, page.title, page.hero — and never an arrangement key a preset sets (list.layout, page.layout, registerCard, list.dateTile). That is why any look sits on any preset (a stage look on the luma preset), and any key you set sits on both.

look

What it sets

default

Nothing beyond the default layer (unset means this).

paper

No default layer at all: the calendar as it was before it had one. The way back, in one key.

minimal

style.card frameless, square, no shadow, padding 8; style.register framed, radius 4, no shadow; frameless fact tiles, session rows and speaker cards; style.dateTile.radius 2; chips { style: "text", case: "upper" }; page.title.size lg.

bold

style.card frameless, radius 20, shadow md, padding 20; style.register frameless, radius 20, shadow lg; fact tiles radius 16; date tile radius 14 with shadow sm; sessions radius 14; speakers radius 20, shadow md; chips.style pill; page.title.size xl.

stage

Cards radius 12, shadow sm; register radius 16, shadow lg; speakers radius 16; chips { style: "chip", case: "upper" }; page.title { size: "xl", align: "center" }; page.hero { overlay: 60, align: "center", backdrop: "glow", height: 460 }.

ticket

Every box framed with small corners (cards 6, register 6 with shadow md, fact tiles 4, date tile 4, sessions 4, speakers 6); chips { style: "outline", case: "upper" }; page.title.size lg; page.hero.backdrop dots.

Preset

What it arranges

standard

The default layer, nothing more.

luma

One row per event under a day label in the gutter, a square picture on the right, past events in a tab, hosts on the card; on the page the cover stands left over the register card.

community

A month-by-month timeline with who is going; a wide banner and "More events" on the page.

conference

A grid of 16:9 covers with a pill date; a full-bleed hero with a countdown; the agenda a column per stage; speakers five across, square.

webinar

A 16:9 thumbnail per row, twelve past events stacked, every time in both zones; one card per series showing its next date; the agenda a table; speakers as a list.

Three combinations no template ships, each one PATCH body:

{ "events": { "look": "stage", "list": { "layout": "rows", "cover": "thumb-right" } } }

The conference stage head (centred title over a shaded, glowing hero) on a plain list of rows — a single flagship event on a quiet calendar.

{ "events": { "look": "ticket", "page": { "hero": { "backdrop": "none" } }, "chips": { "style": "pill" } } }

The ticket stub's framed cards and register card, without its dotted backdrop and with round pills instead of outlined caps.

{ "events": { "look": "minimal", "style": { "register": { "shadow": "lg", "radius": 16 } }, "page": { "showCountdown": true } } }

A typeset list whose one raised object is the register card, counting down to the start.

Each element's own box: style

style.card, style.register, style.factTile, style.session and style.speaker each take the same box; style.dateTile takes only radius, border and shadow (its fill is dateTileTone).

Key

Default

What it does

background

the surface it sits on

The fill: a palette slot or a hex (with a dark-mode twin).

border

as before (on where there was one)

Draw the frame at all.

borderColor

the theme's hairline

The frame's colour.

radius

as before

Corner radius, 0–40 px.

shadow

as before

The components' elevation steps (none, sm, md, lg, …).

padding

as before

Inner space, 0–48 px.

card is the calendar's card wherever it appears: the index, feeds, "More events" and embeds.

The calendar: list

On top of the shared list keys every type has (layout, group, facets):

Key

Default (default layer)

What it does

view

list

calendar draws a month grid, one month per address (?month=2026-11), a day list on a phone.

viewSwitch

on

"List | Month" links over the calendar.

weekStart

Sunday in English, Monday otherwise

The month grid's first column.

filters

["mode", "month"]

Filter rows (in person / online, month) beside the tag row. A row with one choice is not drawn.

pastMode

stacked

tabs, hidden or link (one "Past events" link).

pastLimit

6

Past events listed before "All past events" (1–50).

pastDim

30

How faded the past half reads, 0–90 %.

calendar

see below

The month grid's cells.

featured

{ pin: true, badge: true }

Featured events lead the upcoming list, with a "Featured" chip.

dateTile

block

none, block, outline or pill.

cover

thumb-right

none, thumb-left, thumb-right or top.

coverAspect

1:1

1:1, 4:3, 16:9, 2:1, 3:1.

showAttendees, showCapacity, showLocation

on

"12 going", "12 spots left" / "Full", the place on the card.

showHosts

off

The hosts' names and pictures on the card.

density

today's padding

The forum list's density words.

timeDisplay

source

Which zone the card's time reads in: the event's, the reader's, or both.

zoneToggle

on

The "Event time / My time" switch (only drawn when the zones differ).

list.calendar: showTimes (on), maxPerDay (3, 1–8, then "N more"), hideWeekends (off), showState (on) and phone (list draws the month's days as cards on a phone; grid keeps the grid).

An event's page: page

Key

Default (default layer)

What it does

layout

single

split-cover-left, hero-wide or hero-full (the cover edge to edge, the title over it).

registerCard

sticky-side

inline or sticky-bottom-mobile.

registerWidth

320

The register column's width, 240–480 px.

phoneBar

on

A bar at the foot of a phone's screen with the date and "Register".

phoneCover

show

hide leaves the cover out on a phone, so the date is above the fold.

cover

shown

show, aspect, radius (0–48), shadow.

facts

{ look: "tiles" }

How when / where / mode read.

title

md, start

size (sm, md, lg, xl) and align (start, center).

hero

—

For hero-full: height (160–760 px), overlay (0–80 %), align (start, center, end); and for any layout a backdrop pattern behind the head (none, dots, grid, waves, glow), animate, tone.

background

none

A pattern behind the whole page: pattern (none, dots, grid, waves, aurora, confetti), animated, strength (5–60 %, 15). Movement stops for readers who ask for reduced motion.

density

cozy

compact tightens the space between facts, register card and body.

showCountdown

off

"Starts in 2 days 4 hours".

showRelated, relatedCount

on, 3

"More events" (1–6).

timeDisplay, zoneToggle

source, on

As on the list.

showMap

on

A map under the facts when the event has a venue. map.style card (our own drawn card, no outside request) or tile (street-map tiles fetched by our server, needs the venue's coordinates); map.zoom (3–18, 15), map.aspect, map.linkTo (google, apple, openstreetmap, none).

showAttendees

on

Faces of attendees who chose to be shown — only when the space shows attendees publicly.

live

—

While the event is on: banner (on), joinButton (on), embedStream (off: a YouTube, Vimeo, Loom or video-file link plays in the page), tone.

sponsors

shown

show, layout (grid, strip, list), columns (2–6, 4), grayscale (off), groupByTier (on).

faq

shown

show, layout (accordion or list).

details

—

venueNotes (on), accessibility (on), minAge (on), hostBios (off).

showDiscussion

on

"Join the discussion" when the event links a forum topic.

contactHost

off

A "Write to the hosts" form under the description.

seriesRsvp

on

"Going to every date" on an event in a series.

sections

the order below

The order of the parts under the description.

page.sections reorders, it does not hide: list the parts you want first and the rest follow in their default order — attendees, map, teaser, sponsors, faq, discussion, dates, feedback, engage, liveRoom, contact, cfp. A listed part the event does not have is skipped. Set it in one event's own theme (below) to give that event its own order.

The rest of the namespace

Key

What it holds

item

The page's side rail (rail.items from back, date, tags, share, author, actions, facts, people, subscribe, cta) and item actions (copyLink, print, share). Set, it wins over page. A rail item an event cannot draw (toc, vote, …) is a 422.

chips

The state pill's look; unset follows the front door's badge style.

tones

Each state's colour: cancelled, postponed, live, rescheduled, full.

dateTileTone

The date tile's colour. Unset: the brand colour.

agenda

layout (list, table, grid-by-stage), dayTabs, showFilters, showCount, showSpeakers, showSave, showAddToCalendar, timeDisplay, zoneToggle.

speakers

layout (grid, carousel, list), columns (2–6, 4), avatarShape (circle, rounded, square), showBio, showSocials.

session

A session's own page: width (text or wide), showSpeakers (on), showRelated (off: "More in this track").

speaker

A speaker's own page: width, showSessions, showSocials, showPronouns (all on; pronouns show everywhere a speaker is named).

series

list (each date or the next one per series), showBadge, showDates, datesCount (6), showSubscribe.

after

A finished event: recordingFirst, recording (player or card), gallery (layout grid/carousel/hidden, columns, aspect), showRecap, showFeedback.

embed

The calendar embed: layout (list, compact, month), limit (6, 1–30), showRsvp (on), showMore (on).

social

The generated share card: card (auto draws one for an event with no picture; off), always (use it even when the event has a cover).

One event, its own look

An event's customization (see One event's own look and share card) takes the events namespace and nothing else: any key above, for that event only, over the space's. Another type's namespace (post, docs, …) is refused with a 422 that names it, rather than accepted and drawn nowhere.

{ "customization": { "theme": { "events": { "look": "stage", "page": { "layout": "hero-full" } } } } }

The event's agenda, speakers, speaker and session pages wear the event's theme and custom CSS too, so a flagship event's programme matches its page. Its SEO and JSON-LD are not inherited by them.

Theme outlets on event pages

Theme components (see Theme components) can draw into these slots:

Outlet

Where

Context

events-above-list

The calendar, above the list.

events-card-footer

The foot of every event card (repeats).

event.title, event.slug

events-page-above-body

An event page, between the details and the description.

event.title, event.slug

events-page-aside

An event page, under the register card.

event.title, event.slug

events-page-after-body

An event page, after the description and register card, before "More events".

event.title, event.slug

events-subpage-top

The agenda, speakers, a speaker and a session page, under the event header.

event.title, event.slug, subpage

events-subpage-bottom

The same pages, at the end of their content.

event.title, event.slug, subpage

Reach, timing and the page's own content

These keys sit on the event itself (POST …/events, PATCH …/events/{id}). Every one defaults to what an event did before it existed, so an event that sets none reads as it always has. In the studio they are in the event form's Access and During and after sections.

Key

Default

What it does

visibility

public

unlisted: the address works, but the event is off the calendar, feeds, the .ics subscription, the sitemap and "More events", and is noindex. private: staff only; every public door answers 404.

noindex

false

Keep this event out of search engines while it stays listed.

featured

false

Pin it to the top of the calendar (drawn by list.featured).

publishAt

null

A published event stays off every public door until this instant; subscribers are told then.

rsvpOpensAt, rsvpClosesAt

null

The RSVP window. Null opens now and closes when the event is over. The event carries rsvpWindow (early, open, closed) judged by the database clock.

hideVenueUntilRsvp

false

Withhold the address from the page, the .ics and the JSON-LD until the reader is going.

venueNotes

null

Directions, parking, which door — shown under the place.

streamUrl

null

An embeddable livestream (YouTube, Vimeo, any https player), shown while the event is on and page.live.embedStream is set.

sponsors

[]

Up to 40 { name, url, logoUrl, tier, blurb }; they group by tier in the order tiers first appear.

faq

[]

Up to 30 { question, answer } (Markdown answers).

accessibility

null

Step-free access, captions, a quiet room.

minAge

null

"18+" on the page.

reminders

null

This event's reminder leads (7d, 3d, 1d, 3h, 1h, 15m); [] sends none; null uses the space's notices.

customFields

[]

Up to 12 of your own facts, [{ label, value }], drawn with the others.

terms

null

Terms (Markdown) a reader must accept to RSVP or buy (acceptTerms: true on the request).

category

null

One word for discovery.

password

null

Write-only. The page asks for it before showing anything; null removes it. The event reports passwordProtected.

translations

{}

Up to 20 languages, { "de": { title, summary, description, location, venueNotes } }. A reader on that language's address sees them, field by field.

discoverable

false

List the event in the public directory at /e/discover (published, public events only).

Who may RSVP

Key

Default

What it does

rsvpGroups

[]

Up to 20 organization groups whose members may RSVP. Empty means anybody who can read the event.

rsvpHostsOnly

false

Only the hosts add people (a closed event with a public page).

blockedUserIds

[]

People who may not RSVP.

replayGated

false

The recording shows only to readers who were going.

A reader is told the RSVP is restricted (rsvpRestricted), never which groups. Registration questions keep using the Forms field model; a file question now uploads through …/events/{handle}/rsvp-files, a question can depend on another's answer, and a signed-in reader's answers are prefilled from their last registration in the space. A referral link is the event's address with ?ref=<code>; the RSVP carries ref, and each registration is credited to the code's owner.

Series, sessions and the schedule builder

A monthly series can now repeat on "the 2nd Tuesday": { "freq": "monthly", "byWeekday": ["TU"], "bySetPos": 2 } (bySetPos is 1–4, or -1 for the last). A reader can RSVP to every date at once (page.seriesRsvp, on by default).

A session gains kind (talk, keynote, workshop, panel, lightning, break, meal, networking, other; default talk), language (a BCP 47 tag), its own streamUrl, capacity, and registration: with it on, a reader's My agenda save is a sign-up, up to capacity seats. A speaker gains a tagline under the name. Attendees rate a session as well as the event, and the ratings summary breaks it down per session.

In the studio, Schedule builder in the event form lays the programme out by time and room: drag a session to another slot or stage, or nudge the selected one with the arrow keys.

Tickets, tax and the box office

Ticketing builds on the tiers, promo codes and the organization's own Stripe connection the events manager already had. A tier (POST …/events/{handle}/tiers) gains:

Key

Default

What it does

kind

ticket

addon is bought beside a ticket (merch, parking, a workshop seat) and seats nobody.

minPerOrder

1

The smallest order of this tier ("a table of four"). Cannot exceed maxPerOrder.

hidden, unlockCode

off

A hidden tier is off the ticket box until a reader enters its code (?unlock= works too). A hidden tier without a code is refused.

payWhatYouWant

false

The buyer names the price; priceCents is the minimum.

seatsPerUnit

1

A bundle: one unit seats this many.

bulkDiscounts

none

Up to five { minQuantity, percentOff } steps; the best one a quantity reaches applies.

slotStartsAt, slotEndsAt

none

Timed entry: when this tier's holders may come in.

questions

none

The tier's own registration questions, asked after the event's.

The event's ticket rules are settings on PUT …/events/{handle}/ticketing (studio: Tax, fees, refunds, seating and sales):

Key

Default

What it does

tax

none

{ ratePercent, inclusive, label, stripeAutomatic }. A fixed rate (e.g. 19, label: "VAT"), shown "incl." or added on top; or stripeAutomatic: true to let Stripe Tax compute it.

fees

none

{ mode, percent, fixedCents }. pass adds a service fee for the buyer; absorb keeps the price the price.

refunds

none

{ selfService, daysBefore }: none, until_start, or days_before with 1–90 days. Buyers refund their own orders within it.

autoRefundOnCancel

off

Cancelling the event refunds every paid order.

waitlist

none

{ enabled, offerHours }: a sold-out tier takes orders without payment; when a seat frees, the next buyer is mailed a pay link held for offerHours (1–23), then it passes on.

selfCheckIn

none

{ enabled, radiusMeters }: attendees check themselves in from their phone within 50–5000 m of the venue's map pin.

badgeLine

none

Which registration answer goes under the name on badges (e.g. company).

collectBilling

off

Ask buyers for company, VAT id and address.

invoice

none

{ issuer, address, taxId, footer } — who the invoice is from.

seatMap on the same call is reserved seating: up to 20 sections, each with rows of up to 200 seats and an optional tierId that only that tier may sit in. A seat is named <section>/<row>/<n>; the reader picks seats on a map, and seats in a cart are held while the buyer pays.

A cart (quote and checkout) gains answers, attendees (group registration: a name and email per extra ticket, each getting their own ticket), billing, addons, seats, unlockCode and unitCents (the PWYW amount). With the space's RSVP approval on, a paid order waits as requested until a host approves it, and only then is the buyer sent to pay; a waitlisted order is waitlisted, then offered.

Call

Who

What it does

POST …/events/{handle}/orders/box-office

hosts

Sell at the door (cash or card taken elsewhere).

POST …/events/{handle}/orders/{orderId}/approve / decline

hosts

Approval before payment.

GET …/events/{handle}/orders/report

hosts

The sales report, with the Stripe payouts.

GET …/events/{handle}/orders/{orderId}/invoice

hosts

An order's invoice (PDF).

GET …/events/{handle}/my-orders

the buyer

A reader's own orders, each with its invoice.

POST …/events/{handle}/my-orders/{orderId}/refund

the buyer

A self-service refund inside the refund window.

Running the event: the Run panel

Each event in the events manager has a Run panel for the days around it. Everything here is open to the event's hosts: anyone holding forum.moderate on the space, and the event's co-hosts.

  • Invitations — invite up to 200 addresses a time with a line of your own (POST …/events/{handle}/invites); the invitee answers from the mail.

  • Messages — mail attendees now, at a time (sendAt), or a while after the end (afterEndMinutes), to an audience of going, waitlist, interested, checked_in, no_show or all. kind: "thank_you" and "feedback" are the after-event mails.

  • Co-hosts — PUT …/events/{handle}/cohosts { userId, role }. A manager co-host runs everything here; a door co-host may only check people in.

  • Door — opens …/{slug}/door on a phone: the camera scans ticket QR codes (typed codes where the browser has no barcode reader), and a kiosk mode checks people in by the email they registered with. GET …/badges.pdf prints badges. Each check-in fires the rsvp.checked_in webhook.

  • Live — moderate questions, open and close polls, approve photos, read the ratings and NPS, manage sponsor booths and their leads.

  • Proposals — the call for papers (below).

Hosts can also add an attendee by hand (POST …/events/{handle}/attendees), correct one (PATCH …/attendees/{rsvpId}/details), and an attendee can hand their place to someone else (POST …/events/{handle}/transfer). A reader's ticket, with its QR code, is at …/{slug}/ticket and can be mailed again (POST …/events/{handle}/ticket/mail).

During and after

Each feature is off until the event turns it on, and its door answers 404 for an event that did not ask for it.

Key

What it switches on

qaEnabled

Live questions with upvotes (one vote per person; pressing again takes it back). Hosts mark them answered or hidden.

pollsEnabled

Polls of 2–10 options. A poll starts as a draft; the tally shows once you have voted or the poll is closed.

photosEnabled

Attendees who were going upload photos; each waits for a host's approval.

ratingsEnabled

1–5 stars, an optional 0–10 "would you recommend", and a comment, from people who came. Hosts see the average and NPS.

attendanceCertificates

A certificate of attendance (PDF with a QR code) for everyone checked in; its QR leads to a verify page at …/{slug}/attendance/{rsvpId} that is never indexed.

live

The live room: { chat, reactions, directory, networking, gamification }, each off by default. See Live rooms.

Sponsor booths (POST …/events/{handle}/booths) list a sponsor with a lead prompt and an optional promo code. An attendee chooses to leave their name and address with a booth; nothing is shared until they press it.

Call for papers

cfp on the event — { opensAt, closesAt, categories, formats, questions, intro } — opens a public form at …/{slug}/cfp. A proposal carries the speaker, up to four co-speakers, a title, an abstract (20–5000 characters), a category, a format and the answers. Hosts review them under Proposals with stars and notes, accept or decline (the speaker is mailed), and mail every speaker at once; an accepted speaker confirms and edits their own details from a private link. null closes the call.

The network

With the live room's directory on, people who are going can make a profile visible — headline, bio, interests, links, answers to the calendar's profile questions, and openToMeet — and with networking on they request 1:1 meetings with a message, a proposed time and a place. With gamification on, actions earn points on a leaderboard. The calendar's profile questions and points are space settings (PUT …/events-network-settings, studio: Member profiles and points):

Key

Default

What it does

profileQuestions

[]

Up to 10 { key, label, required } asked on every profile.

points.checkIn

50

Points for being checked in.

points.question

10

Points for asking a question.

points.chat

1

Points per chat message.

points.rating

20

Points for rating the event.

points.meeting

15

Points for a meeting.

Chapters and the network overview

An organization that runs many calendars can make each one a chapter (POST /orgs/{orgId}/events-network/chapters, studio: Chapters and integrations): a name, slug, the EVENTS space it is, a city and country, map coordinates, and up to 20 leaders who act as staff on that chapter's events. Readers get a chapter directory with a drawn map (no map tiles) at /e/{orgId}/chapters. POST …/events/{handle}/global { "global": true } lists an event in every chapter's calendar. The Network overview sums events, RSVPs, check-ins, members and attendance rate across chapters.

Co-listing and suggestions

colistOn lists an event in up to ten other EVENTS spaces of the organization too; it stays one event, with one RSVP list. With submissions on in the space's attendance settings, readers can suggest an event (POST /public/orgs/{orgId}/spaces/{spaceId}/event-submissions); each arrives as a draft for you to publish.

Insights

The event page counts views and registrations by source without cookies, and the Insights card in the event form shows views, registrations, check-ins, conversion and show-up rate by day and by source. Tracking links (POST …/events/{handle}/insights/links { label, source, medium, campaign }) give you a UTM-tagged address per channel and count each one. When your site loads Meta Pixel or GA4 (your analytics settings, Meta Pixel as metaPixel), registrations and paid orders are reported to them as their standard conversion events; nothing is loaded for a reader who refused that consent category.

Importing, quick create and covers

Import events in the events manager reads an .ics file (any calendar exports one) or the CSV exports of Luma, Eventbrite and Meetup (POST …/events/import), and reports each row it skipped and why. See Importers.

/o/{orgId}/new-event is a short phone-sized form for creating an event on the go. Under Live, insights and cover an event without a picture can take one of several generated covers, or have your own AI draw one (Draw with AI, which uses your organization's OpenAI key from its AI settings and is off without one).

Embeds and share cards

Each of these renders bare inside an <iframe> on your own site with ?embed=1:

Address

What it shows

/e/{orgId}/{spaceId}/embed/calendar

The upcoming list, in embed.layout (list, compact, month).

/e/{orgId}/{spaceId}/embed/{slug}

One event's card.

/e/{orgId}/{spaceId}/embed/{slug}/register

The register box. Stripe checkout opens in a new tab inside a frame.

/e/{orgId}/{spaceId}/embed/{slug}/agenda

The programme.

/e/{orgId}/{spaceId}/embed/{slug}/speakers

The speaker wall.

An event or calendar with no picture of its own gets a generated share card (…/social-card.png, governed by theme.events.social).

What an event mails, now

Beside the confirmations and reminders above, the events group of the email templates gains events.invite, events.ticket, events.ticket-offer (a waitlist seat), events.submission-received, events.submission-decision, events.speaker-message and events.contact-host. Webhooks gain rsvp.checked_in (carrying eventId, rsvpId, userId, guests, checkedInAt — what a badge printer or gate listens to), ticket_order.paid and ticket_order.requested.

Templates

Six events templates ship with the product; Expohall (a trade show and summit) switches on the whole toolkit: sponsor booths with opt-in leads, live Q&A and polls, a photo wall, an open call for papers, workshops with their own seats, a password-protected dinner, certificates of attendance and an after-event rating. Like every template it uses no custom CSS: every detail is a theme key or event data.

What you need to set up

Most of an events space works the moment it exists. These parts need an account or a key of yours first; until then each one is simply not offered.

Feature

What you need

Where

Until then

Paid tickets

Your own Stripe account.

Organization settings → Payments (Payments and the shop).

Tiers can be free; the ticket box offers no paid checkout.

Stripe Tax (tax.stripeAutomatic)

Stripe Tax switched on in your Stripe dashboard, with your tax registrations.

Stripe, then the event's ticket rules.

Use a fixed ratePercent instead: Stripe will not open a checkout with automatic tax until Stripe Tax is set up.

HubSpot, Salesforce, Mailchimp sync

A HubSpot private-app token; Salesforce instanceUrl, clientId and clientSecret (client-credentials flow); or a Mailchimp API key and audience id.

Chapters and integrations → Integrations, or PUT /orgs/{orgId}/events-network/integrations/{provider} with credentials, settings and enabled.

Nothing is sent. Credentials are write-only and encrypted; each registrant who becomes going is sent once it is switched on, and the last error is shown.

LiveKit stage and breakout rooms

A LiveKit server.

See Live rooms.

Rooms can still be a link to any meeting tool.

Meta Pixel / GA4 conversions

Your pixel or measurement id.

Analytics.

No conversions are reported.

AI cover

An OpenAI key.

The organization's AI settings.

Generated covers only.

Not built, and what to use instead:

  • SMS or WhatsApp reminders — reminders go by email only (reminders, the space's notices). There is no text-message channel for events.

  • Apple Wallet and Google Wallet passes — the ticket is the QR code at …/{slug}/ticket, in the mailed ticket, plus the .ics for the calendar.

  • Zoom or Google Meet links created for you — paste the meeting link into the event, or add it as a link room in the live room.

  • Venue autocomplete — type the address; the map card and "Open map" use it, and street tiles need the venue's coordinates.

The Zapier app turns course and event webhooks (RSVP created, updated, cancelled or checked in; event published, updated or cancelled) into Zapier triggers, and the WordPress plugin frames the register box and course embeds on a WordPress site. See Zapier, Terraform, React and WordPress.

Not yet published. Import into the guides space's "Building your site" collection beside the other space-type guides. Re-import after editing — the page is not generated from this file.

In the API

Every operation below is also reachable from the other surfaces without a dedicated command. forumulate api <Operation> calls it from the CLI, the JavaScript SDK has a typed method for each one (the last column names it; the Python and Go clients are generated from the same spec), and an agent reaches the organization-scoped ones through the MCP call_api tool. Where a CLI command or MCP tool exists too, the last column names it. Operation names link to the API reference.

Event Agenda Public

Operation

Request

What it does

Shortcuts

EventAgendaPublic_agenda

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/agenda

Get the agenda in a space

client.events.publicAgenda.agenda()

EventAgendaPublic_ics

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/sessions/{session}/calendar.ics

File of calendar (sessions)

client.events.publicAgenda.ics()

Event Attendees

Operation

Request

What it does

Shortcuts

EventAttendees_list

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/attendees

List attendees in a space

client.events.attendees.list()

EventAttendees_csv

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/attendees.csv

File of attendees

client.events.attendees.csv()

EventAttendees_patch

PATCH /orgs/{orgId}/spaces/{spaceId}/events/{handle}/attendees/{rsvpId}

Update the attendee

client.events.attendees.patch()

EventAttendees_message

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/attendees/message

Create the message in a space

client.events.attendees.message()

EventAttendees_settings

GET /orgs/{orgId}/spaces/{spaceId}/event-attendance

Get the event attendance in a space

client.events.attendees.settings()

EventAttendees_saveSettings

PUT /orgs/{orgId}/spaces/{spaceId}/event-attendance

Replace the event attendance in a space

client.events.attendees.saveSettings()

Event Attendees Public

Operation

Request

What it does

Shortcuts

EventAttendeesPublic_settings

GET /public/orgs/{orgId}/spaces/{spaceId}/event-attendance

Get the event attendance in a space (public reader)

client.events.publicAttendees.settings()

EventAttendeesPublic_list

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/attendees

List attendees in a space (public reader)

client.events.publicAttendees.list()

EventAttendeesPublic_request

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/rsvp

Create the rsvp in a space

client.events.publicAttendees.request()

EventAttendeesPublic_confirm

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/rsvp/confirm

Confirm the rsvp

client.events.publicAttendees.confirm()

EventAttendeesPublic_cancel

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/rsvp/cancel

Cancel the rsvp

client.events.publicAttendees.cancel()

Event Engage Public

Operation

Request

What it does

Shortcuts

EventEngagePublic_unlock

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/unlock

Unlock the event

client.events.publicEngage.unlock()

EventEngagePublic_unlocked

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/unlocked

Get the unlocked in a space

client.events.publicEngage.unlocked()

EventEngagePublic_ticket

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/ticket

Get the ticket in a space (public reader)

client.events.publicEngage.ticket()

EventEngagePublic_ticketCertificate

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/ticket/certificate

Get the certificate in a space (public reader events ticket)

client.events.publicEngage.ticketCertificate()

EventEngagePublic_verifyAttendance

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/attendance/{rsvpId}

Get the attendance

client.events.publicEngage.verifyAttendance()

EventEngagePublic_answerInvite

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/invites/answer

Create the answer in a space (public reader events invites)

client.events.publicEngage.answerInvite()

EventEngagePublic_questions

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/questions

List questions in a space (public reader events)

client.events.publicEngage.questions()

EventEngagePublic_polls

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/polls

List polls in a space (public reader)

client.events.publicEngage.polls()

EventEngagePublic_photos

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/photos

List photos in a space

client.events.publicEngage.photos()

EventEngagePublic_booths

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/booths

List booths in a space (public reader)

client.events.publicEngage.booths()

EventEngagePublic_submit

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/submissions

Create a submission in a space (events)

client.events.publicEngage.submit()

EventEngagePublic_mySubmission

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/cfp/{token}

Get the cfp

client.events.publicEngage.mySubmission()

EventEngagePublic_speakerAction

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/cfp/{token}

Create the cfp

client.events.publicEngage.speakerAction()

Event Extras

Operation

Request

What it does

Shortcuts

EventExtras_rsvpFile

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/rsvp-files

Create a rsvp file in a space

client.events.extras.rsvpFile()

EventExtras_prefill

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/answers-prefill

Get the answers prefill in a space

client.events.extras.prefill()

EventExtras_badges

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/badges.pdf

Get the badges PDF in a space

client.events.extras.badges()

EventExtras_selfCheckIn

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/self-check-in

Check yourself in at the venue

client.events.extras.selfCheckIn()

EventExtras_reach

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/reach

Get the reach in a space

client.events.extras.reach()

EventExtras_rsvpSeries

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/rsvp-series

Create a rsvp series in a space

client.events.extras.rsvpSeries()

Event Extras Public

Operation

Request

What it does

Shortcuts

EventExtrasPublic_rsvpFile

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/rsvp-files

Create a rsvp file in a space (public reader)

client.events.publicExtras.rsvpFile()

EventExtrasPublic_contact

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/contact

Create the contact in a space (events)

client.events.publicExtras.contact()

Event Meetings

Operation

Request

What it does

Shortcuts

EventMeetings_list

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/meetings

An event’s meetings, host links included

client.events.meetings.list()

EventMeetings_create

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/meetings

Create a Zoom or Google Meet meeting for the event or a session

client.events.meetings.create()

EventMeetings_remove

DELETE /orgs/{orgId}/spaces/{spaceId}/events/{handle}/meetings/{meetingId}

Forget a meeting (the provider keeps it)

client.events.meetings.remove()

EventMeetings_links

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/meetings/links

An event’s meeting links as this member may see them

client.events.meetings.links()

Event Meetings Public

Operation

Request

What it does

Shortcuts

EventMeetingsPublic_links

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/meetings

An event’s meeting links, per its join-link visibility

client.events.publicMeetings.links()

Event My Agenda

Operation

Request

What it does

Shortcuts

EventMyAgenda_mine

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/my-agenda

Your agenda for an event

client.events.myAgenda.mine()

EventMyAgenda_add

PUT /orgs/{orgId}/spaces/{spaceId}/events/{handle}/my-agenda/{session}

Add a session to your agenda

client.events.myAgenda.add()

EventMyAgenda_drop

DELETE /orgs/{orgId}/spaces/{spaceId}/events/{handle}/my-agenda/{session}

Remove a session from your agenda

client.events.myAgenda.drop()

Event Network

Operation

Request

What it does

Shortcuts

EventNetwork_chat

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/chat

Get the chat in a space

client.events.network.chat()

EventNetwork_post

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/chat

Create the chat in a space

client.events.network.post()

EventNetwork_moderate

PUT /orgs/{orgId}/spaces/{spaceId}/events/{handle}/chat/{messageId}/{action}

Replace the chat

client.events.network.moderate()

EventNetwork_remove

DELETE /orgs/{orgId}/spaces/{spaceId}/events/{handle}/chat/{messageId}

Delete the chat

client.events.network.remove()

EventNetwork_react

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/reactions

Create a reaction in a space

client.events.network.react()

EventNetwork_rooms

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/rooms

List rooms in a space

client.events.network.rooms()

EventNetwork_addRoom

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/rooms

Create a room in a space

client.events.network.addRoom()

EventNetwork_editRoom

PUT /orgs/{orgId}/spaces/{spaceId}/events/{handle}/rooms/{roomId}

Replace the room

client.events.network.editRoom()

EventNetwork_deleteRoom

DELETE /orgs/{orgId}/spaces/{spaceId}/events/{handle}/rooms/{roomId}

Delete the room

client.events.network.deleteRoom()

EventNetwork_join

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/rooms/{roomId}/join

Join the room

client.events.network.join()

EventNetwork_directory

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/directory

Get the directory in a space (events)

client.events.network.directory()

EventNetwork_answer

PUT /orgs/{orgId}/spaces/{spaceId}/events/{handle}/meetings/{meetingId}

Replace the meeting

client.events.network.answer()

EventNetwork_leaderboard

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/leaderboard

Get the leaderboard in a space (events)

client.events.network.leaderboard()

EventNetwork_insightsView

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/insights

List insights in a space

client.events.network.insightsView()

EventNetwork_addLink

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/insights/links

Create a link in a space

client.events.network.addLink()

EventNetwork_deleteLink

DELETE /orgs/{orgId}/spaces/{spaceId}/events/{handle}/insights/links/{linkId}

Delete the link

client.events.network.deleteLink()

EventNetwork_aiCover

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/ai-cover

Create the AI cover in a space

client.events.network.aiCover()

EventNetwork_global

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/global

Create the global in a space

client.events.network.global()

Event Notices

Operation

Request

What it does

Shortcuts

EventNotices_get

GET /orgs/{orgId}/spaces/{spaceId}/event-notices

List event notices in a space

client.events.notices.get()

EventNotices_put

PUT /orgs/{orgId}/spaces/{spaceId}/event-notices

Replace event notices in a space

client.events.notices.put()

Event Profile

Operation

Request

What it does

Shortcuts

EventProfile_mine

GET /orgs/{orgId}/spaces/{spaceId}/event-profile

Get the event profile in a space

client.events.profile.mine()

EventProfile_save

PUT /orgs/{orgId}/spaces/{spaceId}/event-profile

Replace the event profile in a space

client.events.profile.save()

Event Promo Codes

Operation

Request

What it does

Shortcuts

EventPromoCodes_list

GET /orgs/{orgId}/spaces/{spaceId}/event-promo-codes

List event promo codes in a space

client.events.promoCodes.list()

EventPromoCodes_create

POST /orgs/{orgId}/spaces/{spaceId}/event-promo-codes

Create an event promo code in a space

client.events.promoCodes.create()

EventPromoCodes_replace

PUT /orgs/{orgId}/spaces/{spaceId}/event-promo-codes/{id}

Replace the event promo code

client.events.promoCodes.replace()

EventPromoCodes_remove

DELETE /orgs/{orgId}/spaces/{spaceId}/event-promo-codes/{id}

Delete the event promo code

client.events.promoCodes.remove()

Event Rsvp Privacy

Operation

Request

What it does

Shortcuts

EventRsvpPrivacy_request

POST /public/orgs/{orgId}/spaces/{spaceId}/event-rsvps/privacy

Create the privacy in a space

client.events.rsvpPrivacy.request()

EventRsvpPrivacy_confirm

POST /public/orgs/{orgId}/spaces/{spaceId}/event-rsvps/privacy/confirm

Confirm the privacy

client.events.rsvpPrivacy.confirm()

Event Series Public

Operation

Request

What it does

Shortcuts

EventSeriesPublic_get

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/series

List series in a space (events)

client.events.publicSeries.get()

EventSeriesPublic_ics

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/series.ics

File of series

client.events.publicSeries.ics()

Event Sessions

Operation

Request

What it does

Shortcuts

EventSessions_list

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/sessions

List sessions in a space

client.events.sessions.list()

EventSessions_create

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/sessions

Create a session in a space

client.events.sessions.create()

EventSessions_update

PATCH /orgs/{orgId}/spaces/{spaceId}/events/{handle}/sessions/{session}

Update the session

client.events.sessions.update()

EventSessions_remove

DELETE /orgs/{orgId}/spaces/{spaceId}/events/{handle}/sessions/{session}

Delete the session (orgs spaces events)

client.events.sessions.remove()

Events Network Admin

Operation

Request

What it does

Shortcuts

EventsNetworkAdmin_chapters

GET /orgs/{orgId}/events-network/chapters

List chapters in an organization

client.events.sNetworkAdmin.chapters()

EventsNetworkAdmin_create

POST /orgs/{orgId}/events-network/chapters

Create a chapter in an organization

client.events.sNetworkAdmin.create()

EventsNetworkAdmin_update

PUT /orgs/{orgId}/events-network/chapters/{chapterId}

Replace the chapter

client.events.sNetworkAdmin.update()

EventsNetworkAdmin_remove

DELETE /orgs/{orgId}/events-network/chapters/{chapterId}

Delete the chapter

client.events.sNetworkAdmin.remove()

EventsNetworkAdmin_dashboard

GET /orgs/{orgId}/events-network/dashboard

Read the events network’s console overview: totals and attendance per chapter

client.events.sNetworkAdmin.dashboard()

EventsNetworkAdmin_integrationsList

GET /orgs/{orgId}/events-network/integrations

List integrations in an organization (events network)

client.events.sNetworkAdmin.integrationsList()

EventsNetworkAdmin_integrationSave

PUT /orgs/{orgId}/events-network/integrations/{provider}

Replace the integration (events network)

client.events.sNetworkAdmin.integrationSave()

EventsNetworkAdmin_integrationRemove

DELETE /orgs/{orgId}/events-network/integrations/{provider}

Delete the integration (events network)

client.events.sNetworkAdmin.integrationRemove()

Events Network Settings

Operation

Request

What it does

Shortcuts

EventsNetworkSettings_get

GET /orgs/{orgId}/spaces/{spaceId}/events-network-settings

List events network settings in a space

client.events.sNetworkSettings.get()

EventsNetworkSettings_set

PUT /orgs/{orgId}/spaces/{spaceId}/events-network-settings

Replace events network settings in a space

client.events.sNetworkSettings.set()

Event Speakers

Operation

Request

What it does

Shortcuts

EventSpeakers_list

GET /orgs/{orgId}/spaces/{spaceId}/event-speakers

List event speakers in a space

client.events.speakers.list()

EventSpeakers_create

POST /orgs/{orgId}/spaces/{spaceId}/event-speakers

Create an event speaker in a space

client.events.speakers.create()

EventSpeakers_update

PATCH /orgs/{orgId}/spaces/{spaceId}/event-speakers/{speaker}

Update the event speaker

client.events.speakers.update()

EventSpeakers_remove

DELETE /orgs/{orgId}/spaces/{spaceId}/event-speakers/{speaker}

Delete the event speaker

client.events.speakers.remove()

Event Suggestions Public

Operation

Request

What it does

Shortcuts

EventSuggestionsPublic_suggest

POST /public/orgs/{orgId}/spaces/{spaceId}/event-submissions

Create an event submission in a space

client.events.publicSuggestions.suggest()

Event Ticket Extras

Operation

Request

What it does

Shortcuts

EventTicketExtras_boxOffice

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/orders/box-office

Create the box office in a space

client.events.ticketExtras.boxOffice()

EventTicketExtras_approve

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/orders/{orderId}/approve

Approve the order

client.events.ticketExtras.approve()

EventTicketExtras_decline

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/orders/{orderId}/decline

Create the decline in a space

client.events.ticketExtras.decline()

EventTicketExtras_report

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/orders/report

Get the report in a space (events orders)

client.events.ticketExtras.report()

EventTicketExtras_staffInvoice

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/orders/{orderId}/invoice

Get the invoice in a space (orders)

client.events.ticketExtras.staffInvoice()

EventTicketExtras_myOrders

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/my-orders

List my orders in a space

client.events.ticketExtras.myOrders()

EventTicketExtras_myRefund

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/my-orders/{orderId}/refund

Create the refund in a space (events my orders)

client.events.ticketExtras.myRefund()

EventTicketExtras_myInvoice

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/my-orders/{orderId}/invoice

Get the invoice in a space (my orders)

client.events.ticketExtras.myInvoice()

Event Ticket Extras Public

Operation

Request

What it does

Shortcuts

EventTicketExtrasPublic_invoice

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/ticket/invoice

Get the invoice in a space (public reader ticket)

client.events.publicTicketExtras.invoice()

EventTicketExtrasPublic_refund

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/ticket/refund

Create the refund in a space (public reader events ticket)

client.events.publicTicketExtras.refund()

Event Tickets

Operation

Request

What it does

Shortcuts

EventTickets_tiers

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/tiers

List tiers in a space

client.events.tickets.tiers()

EventTickets_createTier

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/tiers

Create a tier in a space

client.events.tickets.createTier()

EventTickets_updateTier

PATCH /orgs/{orgId}/spaces/{spaceId}/events/{handle}/tiers/{tier}

Update the tier

client.events.tickets.updateTier()

EventTickets_deleteTier

DELETE /orgs/{orgId}/spaces/{spaceId}/events/{handle}/tiers/{tier}

Delete the tier

client.events.tickets.deleteTier()

EventTickets_ticketing

PUT /orgs/{orgId}/spaces/{spaceId}/events/{handle}/ticketing

Replace the ticketing in a space

client.events.tickets.ticketing()

EventTickets_orders

GET /orgs/{orgId}/spaces/{spaceId}/events/{handle}/orders

List orders in a space

client.events.tickets.orders()

EventTickets_refund

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/orders/{order}/refund

Create the refund in a space (events orders)

client.events.tickets.refund()

EventTickets_checkout

POST /orgs/{orgId}/spaces/{spaceId}/events/{handle}/tickets/checkout

Create the checkout in a space (events tickets)

client.events.tickets.checkout()

Event Tickets Public

Operation

Request

What it does

Shortcuts

EventTicketsPublic_view

GET /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/tickets

List tickets in a space

client.events.publicTickets.view()

EventTicketsPublic_quote

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/tickets/quote

Create the quote in a space

client.events.publicTickets.quote()

EventTicketsPublic_checkout

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/tickets/checkout

Create the checkout in a space (public reader events tickets)

client.events.publicTickets.checkout()

EventTicketsPublic_confirm

POST /public/orgs/{orgId}/spaces/{spaceId}/events/{handle}/tickets/confirm

Confirm the ticket

client.events.publicTickets.confirm()

Public spaces

Operation

Request

What it does

Shortcuts

Public_overview

GET /public/orgs/{orgId}/spaces/{spaceId}

Get the space (public reader)

client.public.overview()<br>MCP list_pages

The Forumulate teamUpdated