---
title: "Temporary events (festivals, exhibitions, shows, seasonal displays) on or still to come as of today’s Asia/Shanghai date, including source references"
method: GET
path: "/api/events"
---

# Temporary events (festivals, exhibitions, shows, seasonal displays) on or still to come as of today’s Asia/Shanghai date, including source references

`GET /api/events`

## Request

- Base URL: `https://chinafootnotes.com`
- URL: `https://chinafootnotes.com/api/events`
- Auth: none declared

## Response `200`

Events not yet ended, soonest first

- EventList
  - `schemaVersion` string
  - `version` string
  - `generatedAt` string, date-time
  - `notice` string
  - `events` Event[], required
    - `id` string, required
    - `kind` 'festival' | 'exhibition' | 'show' | 'performance' | 'seasonal' | 'other', required
    - `title` string, required
    - `startsAt` string, date
    - `endsAt` string, date, required: Exact end date unless endsAtLabel is present; then this is only the upper bound used for filtering, not a confirmed last day.
    - `when` string
    - `where` string
    - `ticket` 'free' | 'included' | 'paid' | 'unknown'
    - `price` string
    - `booking` string
    - `text` string, required
    - `sourceIds` string[], required
    - `placeId` string
    - `sources` Source[]
      - `id` string, required
      - `url` string, uri, nullable, required: null only for our own checks, which have no web page: kind owner_tested (we tried it ourselves; first-hand, not official) or owner_official (the venue's own answer: method phone, onsite_sign or onsite_notice; official). accessedAt is the day we checked.
      - `title` string, required
      - `publisher` string, required
      - `kind` 'official' | 'government', required
      - `method` 'phone' | 'onsite_sign' | 'onsite_notice' | 'null', nullable: Only for kind owner_official: how we got the venue’s answer (by phone, a standing sign on site, or a temporary notice on site).
      - `contact` string, nullable: Only for method phone: who we called (venue and number).
      - `accessedAt` string, date, required
      - `publishedAt` string, date, nullable
    - `dates` string[]: Specific dates when the event runs, inside startsAt..endsAt
    - `basisNotes` object[]
    - `endsAtLabel` string: Source-stated end period when the exact day is unknown. Use this label instead of presenting endsAt as an exact date.

## Other responses

- `400`: Invalid URL encoding
- `500`: Local data/service unavailable

---

[API](https://skmtc.dev/chinafootnotes/apis/china-footnotes.md) · [All operations](https://skmtc.dev/chinafootnotes/apis/china-footnotes/llms.txt) · [OpenAPI document](https://skmtc.dev/chinafootnotes/apis/china-footnotes/revisions/b0050778a942?raw)
