China Footnotes Places API

The Places API from China Footnotes — 2 operation(s) for places.

GitHub OpenAPI

Operations 2

GET /api/places Search canonical places with evidence and monitoring context #
GET /api/places/{id} Read one place and its evidence; retain status and pending-review warnings #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/chinafootnotes-com:chinafootnotes-com-places-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

chinafootnotes-com-places-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Chinafootnotes Com Places API
  version: 0.1.0
  x-coverage:
    cities:
    - Shanghai
    - Beijing
    - Xi’an
    - Chengdu
    - Chongqing
    - Hangzhou
    placeCount: 112
    pretripTopicCount: 9
    dataVersion: e95b0f4e8deb
    generatedAt: '2026-11-03T20:58:20.757Z'
  description: 'Operations tagged Places across 2 of this provider''s published API definitions: chinafootnotes-com-openapi.json, chinafootnotes-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: /
  description: Same origin as this specification
tags:
- name: Places
paths:
  /api/places:
    get:
      operationId: searchPlaces
      summary: Search canonical places with evidence and monitoring context
      parameters:
      - name: q
        in: query
        schema:
          type: string
        description: English/Chinese names, aliases or description; quote variants normalized
      - name: category
        in: query
        schema:
          type: string
        description: Category, case insensitive
      - name: district
        in: query
        schema:
          type: string
        description: District membership; quote variants normalized and multi-district places belong to either district
      - name: type
        in: query
        required: false
        description: 'Place type: open_district, water_town, museum, observation_deck, ticketed_attraction, classical_garden, park, temple.'
        schema:
          type: string
      - name: tag
        in: query
        required: false
        description: Feature tag, e.g. free, booking-required, night-view, open-air.
        schema:
          type: string
      - name: city
        in: query
        required: false
        description: City id, e.g. shanghai. Only published cities; see /api/cities. An unknown city is a 404.
        schema:
          type: string
      responses:
        '200':
          description: Search canonical places with evidence and monitoring context
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaceList'
        '400':
          description: Invalid URL encoding
        '404':
          description: City not found (not published)
        '500':
          description: Local data/service unavailable
      tags:
      - Places
    servers:
    - url: /
      description: Same origin as this specification
  /api/places/{id}:
    get:
      operationId: getPlace
      summary: Read one place and its evidence; retain status and pending-review warnings
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Read one place and its evidence; retain status and pending-review warnings
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaceDetail'
        '400':
          description: Invalid URL encoding
        '404':
          description: Place ID not found
        '500':
          description: Local data/service unavailable
      tags:
      - Places
    servers:
    - url: /
      description: Same origin as this specification
components:
  schemas:
    PlaceDetail:
      type: object
      properties:
        schemaVersion:
          type: string
        version:
          type: string
        generatedAt:
          type: string
          format: date-time
        notice:
          type: string
        place:
          $ref: '#/components/schemas/Place'
        reviewDue:
          type: string
          format: date
        isReviewOverdue:
          type: boolean
        sourceMonitoring:
          type: array
          items:
            $ref: '#/components/schemas/SourceMonitoring'
        hasPendingSourceReview:
          type: boolean
      required:
      - place
      - sourceMonitoring
      - hasPendingSourceReview
    Place:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        localName:
          type: string
        district:
          type:
          - string
          - 'null'
          description: District name; null where not collected yet.
        summary:
          type: string
        number:
          type: integer
          minimum: 1
          description: 1–50 are Shanghai; other cities are numbered from 51.
        category:
          type: string
          enum:
          - Landmarks
          - Museums
          - Neighborhoods
          - Gardens
          - Temples
          - Water towns
        aliases:
          type: array
          items:
            type: string
        highlights:
          type: array
          items:
            type: string
        visitDuration:
          type:
          - string
          - 'null'
          description: Editorial planning suggestion, not a venue rule.
        researchedAt:
          type: string
          format: date
        sources:
          type: array
          items:
            $ref: '#/components/schemas/Source'
        tips:
          type: array
          items:
            $ref: '#/components/schemas/Tip'
        photos:
          type: array
          items:
            $ref: '#/components/schemas/Photo'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Update'
        dataQuality:
          type: object
          properties:
            knownFields:
              type: integer
            totalFields:
              type: integer
            method:
              type: string
            reviewDue:
              type: string
              format: date
          required: []
        sourceMonitoring:
          type: array
          items:
            $ref: '#/components/schemas/SourceMonitoring'
        hasPendingSourceReview:
          type: boolean
        isReviewOverdue:
          type: boolean
        address:
          $ref: '#/components/schemas/Field'
        transport:
          $ref: '#/components/schemas/Field'
        hours:
          $ref: '#/components/schemas/Field'
        admission:
          $ref: '#/components/schemas/Field'
        booking:
          $ref: '#/components/schemas/Field'
        foreignVisitors:
          $ref: '#/components/schemas/Field'
        accessibility:
          $ref: '#/components/schemas/Field'
        lastAdmission:
          $ref: '#/components/schemas/Field'
        city:
          type: string
          description: City id, e.g. shanghai
        area:
          type:
          - string
          - 'null'
          description: Area id within the city (see City.areas)
        group:
          type:
          - string
          - 'null'
          enum:
          - town
          - trips
          - null
          description: For cities split into In town and Day trips (see City.groups)
        distanceKm:
          type:
          - number
          - 'null'
          description: 'Day trips only: rough distance from the centre; null when not checked'
        shortName:
          type: string
          description: Short label for maps and lists
        events:
          type: array
          items:
            $ref: '#/components/schemas/Event'
      required:
      - id
      - name
      - localName
      - category
      - summary
      - highlights
      - researchedAt
      - sources
      - tips
      - photos
      - updates
    PlaceList:
      type: object
      properties:
        schemaVersion:
          type: string
        version:
          type: string
        generatedAt:
          type: string
          format: date-time
        notice:
          type: string
        total:
          type: integer
        places:
          type: array
          items:
            $ref: '#/components/schemas/Place'
      required:
      - total
      - places
    Tip:
      type: object
      properties:
        text:
          type: string
        topic:
          type: string
        kind:
          type: string
          const: traveler_report
        sourceUrl:
          type: string
          format: uri
        sourceTitle:
          type: string
        author:
          type: string
        observedDate:
          type:
          - string
          - 'null'
          format: date
        observedDateRaw:
          type:
          - string
          - 'null'
          description: Original visible date label. It can lack a year or include locale text; never manufacture a year.
        visitDate:
          type:
          - string
          - 'null'
          format: date
        accessedAt:
          type: string
          format: date
        caveat:
          type: string
        commercial:
          type: boolean
      required:
      - text
      - kind
      - sourceUrl
      - accessedAt
    Photo:
      type: object
      properties:
        url:
          type: string
        sourceUrl:
          type: string
        author:
          type: string
        license:
          type: string
        licenseUrl:
          type: string
        caption:
          type: string
        alt:
          type: string
        accessedAt:
          type: string
          format: date
      required:
      - url
      - sourceUrl
      - author
      - license
    Update:
      type: object
      properties:
        id:
          type: string
        text:
          type: string
        publishedAt:
          type:
          - string
          - 'null'
          format: date
        reviewedAt:
          type: string
          format: date
        startsAt:
          type: string
          format: date
        expiresAt:
          type: string
          format: date
        sourceIds:
          type: array
          items:
            type: string
        placeId:
          type: string
        sources:
          type: array
          items:
            $ref: '#/components/schemas/Source'
      required:
      - id
      - text
      - publishedAt
      - reviewedAt
      - startsAt
      - expiresAt
      - sourceIds
    Field:
      type: object
      properties:
        value:
          type:
          - string
          - 'null'
          description: May contain explanation even when status is unknown or conflicting. Never infer confirmation from nonempty value.
        status:
          type: string
          enum:
          - source_checked
          - unknown
          - conflicting
          - not_applicable
          description: source_checked = a published source was read, or we phoned the venue, read its sign on site or tried it ourselves (see the source kind); not confirmed for today. not_applicable means no single policy covers this scoped place; it does not mean free or no booking.
        sourceIds:
          type: array
          items:
            type: string
      required:
      - value
      - status
      - sourceIds
    Source:
      type: object
      properties:
        id:
          type: string
        url:
          type:
          - string
          - 'null'
          format: uri
          description: '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:
          type: string
        publisher:
          type: string
        kind:
          type: string
          enum:
          - official
          - government
        method:
          type:
          - string
          - 'null'
          enum:
          - phone
          - onsite_sign
          - onsite_notice
          - null
          description: '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:
          type:
          - string
          - 'null'
          description: 'Only for method phone: who we called (venue and number).'
        accessedAt:
          type: string
          format: date
        publishedAt:
          type:
          - string
          - 'null'
          format: date
      required:
      - id
      - url
      - title
      - publisher
      - kind
      - accessedAt
    SourceMonitoring:
      type: object
      properties:
        sourceId:
          type: string
        status:
          type: string
          enum:
          - not_checked
          - baseline
          - unchanged
          - changed
          - failed
          - alive
        lastSuccessAt:
          type:
          - string
          - 'null'
          format: date-time
        lastAttemptAt:
          type:
          - string
          - 'null'
          format: date-time
        pendingReviewIds:
          type: array
          items:
            type: string
      required:
      - sourceId
      - status
      - pendingReviewIds
    Event:
      type: object
      properties:
        id:
          type: string
        kind:
          type: string
          enum:
          - festival
          - exhibition
          - show
          - performance
          - seasonal
          - other
        title:
          type: string
        startsAt:
          type: string
          format: date
        endsAt:
          type: string
          format: date
          description: Exact end date unless endsAtLabel is present; then this is only the upper bound used for filtering, not a confirmed last day.
        when:
          type: string
        where:
          type: string
        ticket:
          type: string
          enum:
          - free
          - included
          - paid
          - unknown
        price:
          type: string
        booking:
          type: string
        text:
          type: string
        sourceIds:
          type: array
          items:
            type: string
        placeId:
          type: string
        sources:
          type: array
          items:
            $ref: '#/components/schemas/Source'
        dates:
          type: array
          items:
            type: string
            format: date
          description: Specific dates when the event runs, inside startsAt..endsAt
        basisNotes:
          type: array
          items:
            type: object
        endsAtLabel:
          type: string
          description: Source-stated end period when the exact day is unknown. Use this label instead of presenting endsAt as an exact date.
      required:
      - id
      - kind
      - title
      - endsAt
      - text
      - sourceIds
x-refined-from:
- chinafootnotes-com-openapi.json
- chinafootnotes-com-openapi.yml