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

# Update Event

`PATCH /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`

Update an event's details.

Only provided fields are updated. The event must belong to your host.

A ``null`` means three different things depending on the field.
``externalRegistrationUrl`` treats it as "clear this field".
``title`` rejects it, because an event cannot be untitled. Every other
field ignores it, so omit a field to leave it unchanged.

## Path parameters

- `event_slug` string, required

## Request body

- ExternalEventUpdateRequest: Request to update an event via the external API. All fields are optional — only provided fields are updated.
  - `title` string, nullable
  - `description` string, nullable
  - `startDate` string, date-time, nullable
  - `endDate` string, date-time, nullable
  - `timezone` string, nullable
  - `locationType` 'in_person' | 'virtual' | 'hybrid' | 'global': How guests attend an event.
  - `venue` string, nullable
  - `address` string, nullable
  - `virtualLink` string, nullable
  - `externalRegistrationUrl` string, nullable
  - `isPublic` boolean, nullable
  - `showGuestList` boolean, nullable
  - `image` string, nullable
  - `introductionsEnabled` boolean, nullable
  - `feedbackEnabled` boolean, nullable
  - `notifyAttendees` boolean, nullable

## Response `200`

Successful Response

- ApiResponseExternalEvent
  - `data` ExternalEvent, required: 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.
  - `success` boolean
  - `message` string, nullable

## 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)
