---
title: "Import Event From Url"
method: POST
path: "/v1/events/import"
tags: ["Events"]
---

# Import Event From Url

`POST /v1/events/import`

## 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/import`
- Auth: API key in header `X-API-Key`

Import an event from an external URL.

Accepts a URL to an event page (Eventbrite, Luma, Meetup, etc.),
extracts the event data, and creates a draft event on Eventship.
Ticket types, sessions, and location data are imported automatically.

The event is priced in the currency the source stated, or in your host's
own currency when it stated none. If the source used a currency Eventship
cannot sell in, the imported prices keep their numbers and the event is
created in your currency instead: `message` then says which currency was
substituted. Check it before publishing a priced event.

A source page that states no end time produces an event ending four hours
after its start, which you can change at any time with a PATCH. The page's
agenda does not extend it.

The import refuses a page whose START date it cannot read. It also refuses
several other things, so do not treat that as the only failure: a missing
title, tickets it could parse but not price, tickets in mixed currencies,
and structurally invalid tickets each return their own error code.

## Request body

- ExternalEventImportRequest: Request to import an event from an external URL. Accepts a URL to an event page (Eventbrite, Luma, Meetup, etc.), extracts the event data, and creates a draft event on Eventship.
  - `url` string, required: URL of the external event page to import

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