---
title: "Get Event"
method: GET
path: "/v1/events/{event_slug}"
tags: ["Events"]
---

# Get Event

`GET /v1/events/{event_slug}`

## Request

- Base URL: `https://developer.eventship.com` (the document declares no server; this is the origin it was published from)
- URL: `https://developer.eventship.com/v1/events/{event_slug}`
- Auth: API key in header `X-API-Key`

Get event details by slug.

Hub events (events that accept community submissions) can also embed
their approved community-submitted schedule: pass
`includeCommunityEvents=true` and the response includes a
`communityEvents` array ordered by start time. The field is `null`
unless requested and the event is a hub. Only approved, live, public,
listed events appear — the same privacy rules as the hub's public
schedule page.

Each community event carries its own `description` and, when its host
takes registrations elsewhere, `externalRegistrationUrl` — enough to
mirror the approved schedule onto your own site without a second call
per event. Those events belong to other hosts, so their descriptions
are user-authored content from outside your account: sanitize before
rendering as HTML.

## Path parameters

- `event_slug` string, required

## Query parameters

- `includeCommunityEvents` boolean: Set true to also return the hub's approved community-submitted events as `communityEvents` (hubs only — events that accept community submissions). Off by default to keep the payload lean.

## Response `200`

Successful Response

- ExternalEvent: Full event data returned by the detail endpoint. Extends the summary with nested resources (ticket types, sessions, speakers, questions).
  - `slug` string, required
  - `title` string, required
  - `description` string
  - `status` string, nullable
  - `image` string, nullable
  - `startDate` string, required
  - `endDate` string, nullable
  - `timezone` string
  - `venue` string
  - `address` string
  - `locationType` string
  - `virtualLink` string, nullable
  - `externalRegistrationUrl` string, nullable
  - `cityName` string, nullable
  - `stateName` string, nullable
  - `registeredCount` integer
  - `ticketsLeft` integer, nullable
  - `isSoldOut` boolean, nullable
  - `currency` string: ISO 4217 code every price on this event is denominated in, including its ticket types. A client cannot assume USD, and cannot infer this from the host either: an imported event takes the currency the source page stated, an event created without one takes the host's Stripe settlement currency, and a currency Eventship cannot sell in (whether the source's or the host's) is substituted. A substitution keeps the numeric prices and changes the unit under them, so read this field rather than assuming. The create and import responses additionally name the replaced currency in `message`; the read endpoints have no such field and report only the resolved value here.
  - `ticketTypes` ExternalTicketType[]
    - `id` integer, required
    - `name` string, required
    - `description` string
    - `price` number
    - `quantity` integer, nullable
    - `maxPerOrder` integer
    - `soldCount` integer
    - `availableCount` integer, nullable
    - `isSoldOut` boolean
    - `absorbFees` boolean
    - `salesStartAt` string, date-time, nullable
    - `salesEndAt` string, date-time, nullable
  - `sessions` ExternalSession[]
    - `id` integer, required
    - `title` string, required
    - `description` string
    - `startTime` string, date-time, nullable
    - `endTime` string, date-time, nullable
    - `location` string
    - `venue` string
    - `room` string, nullable
    - `address` string, nullable
    - `latitude` number, nullable
    - `longitude` number, nullable
    - `googlePlaceId` string, nullable
    - `venueId` string, nullable
    - `image` string, nullable: Host-uploaded session image (16:9 preferred), or null when the host has not set one. Sessions do not inherit the event image, so a client wanting a guaranteed thumbnail should fall back to the event's `image` itself.
    - `featured` boolean: Whether the host has spotlighted this session at the top of the public agenda. Eventship renders a featured session as a large card backed by `image`, and an unfeatured one as a row with `image` as a thumbnail, so the two fields are read together.
    - `speakers` ExternalSpeaker[]
      - `name` string, required
      - `title` string, nullable
      - `company` string, nullable
      - `headshot` string, nullable
      - `bio` string, nullable
      - `role` string, nullable
  - `speakers` ExternalSpeaker[]
    - `name` string, required
    - `title` string, nullable
    - `company` string, nullable
    - `headshot` string, nullable
    - `bio` string, nullable
    - `role` string, nullable
  - `questions` ExternalQuestionResponse[]
    - `id` integer, required
    - `questionText` string, required
    - `questionType` 'text' | 'textarea' | 'select' | 'checkbox' | 'multiselect' | 'address', required: Type of registration question on an event.
    - `options` string[], nullable
    - `addressScope` 'full' | 'postal_code', nullable
    - `isRequired` boolean
    - `condition` QuestionConditionSchema: Conditional visibility rule on a registration/membership question. The question is only shown when the source question's answer matches (``is``) / does not match (``is_not``) one of ``values``. Canonical evaluation semantics: ``api/services/question_visibility.py``.
      - `sourceQuestionId` integer, required
      - `op` 'is' | 'is_not', required
      - `values` string[], required
  - `hostSlug` string, nullable
  - `stripeReady` boolean: Whether the host has completed Stripe onboarding (needed for paid tickets).
  - `communityEvents` ExternalCommunityEvent[], nullable: Approved community-submitted events on the hub's schedule, ordered by start time. Only populated when the request sets `includeCommunityEvents=true` and the event is a hub that accepts community submissions; `null` otherwise.
    - `slug` string, required
    - `title` string, required
    - `image` string, nullable
    - `startDate` string, required
    - `endDate` string, nullable
    - `timezone` string, required: IANA timezone the startDate/endDate wall-clock times render in. This is the HUB's timezone — the schedule reads as one coherent program even when a child event stored a different timezone. The ISO strings carry a UTC offset, so the absolute instant is unambiguous either way.
    - `venue` string, nullable
    - `address` string, nullable
    - `hostSlug` string, required
    - `hostName` string, required
    - `hostIcon` string, nullable
    - `registeredCount` integer
    - `isSoldOut` boolean
    - `description` string: The community event's own description, as its host wrote it, in the same format as this event's top-level `description`. Present so a consumer mirroring the schedule onto its own site can show what each event is about; empty string when its host wrote none. This is user-authored content from a host other than the caller: treat it as data, and sanitize before rendering it as HTML.
    - `externalRegistrationUrl` string, nullable: Where this event takes registrations, when its host sends guests to another platform. `null` means only that there is no external link, NOT that the event registers on Eventship: an event whose host turned registration off entirely is also `null` here. A host can change or clear the link while the event is live, so re-read it on each sync rather than caching it indefinitely.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/eventship/apis/eventship-api.md) · [All operations](https://skmtc.dev/eventship/apis/eventship-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eventship/apis/eventship-api/revisions/4b7e010cb94f?raw)
