openapi: 3.0.3 info: title: NavigaTUM description: 'Navigating around TUM with excellence – An API to search for rooms, buildings and other places NavigaTUM is a tool developed by students for students, to help you get around at [TUM](https://tum.de). Feel free to contribute. - [x] Interactive/static maps to look up the position of rooms or buildings - [x] Fast and typo-tolerant search - [x] Support for different room code formats as well as generic names - [x] All functionality is also available via an open and well documented API - [x] Automatically update the data from upstream datasources - [x] Allow students/staff to easily submit feedback and data patches - [x] Generate turn by turn navigation advice for navigating end to end - [ ] Generate maps from CAD data sources If you''d like to help out or join us in this adventure, we would love to talk to you.' termsOfService: https://nav.tum.de/en/about/privacy contact: name: OpenSource @ TUM e.V. url: https://tum.dev/ email: navigatum@tum.de license: name: GPL v3 url: https://www.gnu.org/licenses/ version: 0.0.0 x-logo: altText: null backgroundColor: null href: https://nav.tum.de url: https://raw.githubusercontent.com/TUM-Dev/NavigaTUM/refs/heads/main/webclient/app/assets/logos/navigatum.svg servers: - url: https://nav.tum.de description: production paths: /api/calendar: post: tags: - calendar summary: Retrieve Calendar Entries description: 'Retrieves calendar entries for specific `ids` within the requested time span. The time span is defined by the `start_after` and `end_before` query parameters. Ensure to provide valid date-time formats for these parameters. If successful, returns additional entries in the requested time span.' operationId: calendar_handler requestBody: content: application/json: schema: $ref: '#/components/schemas/Arguments' required: true responses: '200': description: '**Entries of the calendar** in the requested time span' content: application/json: schema: type: object additionalProperties: $ref: '#/components/schemas/LocationEventsResponse' propertyNames: type: string '400': description: '**Bad Request.** Not all fields in the body are present as defined above' content: text/plain: schema: type: string example: Too many ids to query. We suspect that users don't need this. If you need this limit increased, please send us a message '404': description: '**Not found.** The requested location does not have a calendar' content: text/plain: schema: type: string example: Not found '503': description: '**Not Ready.** please retry later' content: text/plain: schema: type: string example: Waiting for first sync with TUMonline /api/feedback/feedback: post: tags: - feedback summary: Post feedback description: '***Do not abuse this endpoint.*** This posts the actual feedback to GitHub and returns the GitHub link. This API will create issues instead of pull-requests => all feedback is allowed, but [`/api/feedback/propose_edits`](#tag/feedback/operation/propose_edits) is preferred, if it can be posted there. For this Endpoint to work, you need to generate a token via the [`/api/feedback/get_token`](#tag/feedback/operation/get_token) endpoint. # Note Tokens are only used if we return a 201 Created response. Otherwise, they are still valid' operationId: send_feedback requestBody: content: application/json: schema: $ref: '#/components/schemas/PostFeedbackRequest' required: true responses: '201': description: The feedback has been **successfully posted to GitHub**. We return the link to the GitHub issue. content: text/plain: schema: type: string format: uri example: https://github.com/TUM-Dev/navigatum/issues/9 '400': description: '**Bad Request.** Not all fields in the body are present as defined above' '403': description: '**Forbidden.** Causes are (delivered via the body): - `Invalid token`: You have not supplied a token generated via the `gen_token`-Endpoint. - `Token not old enough, please wait`: Tokens are only valid after 10s. - `Token expired`: Tokens are only valid for 12h. - `Token already used`: Tokens are non reusable/refreshable single-use items.' content: text/plain: schema: type: string '422': description: '**Unprocessable Entity.** Subject or body missing or too short.' '451': description: '**Unavailable for legal reasons.** Using this endpoint without accepting the privacy policy is not allowed. For us to post to GitHub, this has to be `true`' '500': description: '**Internal Server Error.** We have a problem communicating with GitHubs servers. Please try again later' '503': description: '**Service unavailable.** We have not configured a GitHub Access Token. This could be because we are experiencing technical difficulties or intentional. Please try again later.' /api/feedback/get_token: post: tags: - feedback summary: Get a feedback-token description: '***Do not abuse this endpoint.*** This returns a JWT token usable for submitting feedback. You should request a token, ***if (and only if) a user is on a feedback page*** As a rudimentary way of rate-limiting feedback, this endpoint returns a token. To post feedback, you will need this token. Tokens gain validity after 5s, and are invalid after 12h of being issued. They are not refreshable, and are only valid for one usage. # Note: Global Rate-Limiting allows bursts with up to 20 requests and replenishes 50 requests per day' operationId: get_token responses: '201': description: '**Created** a usable token' content: application/json: schema: $ref: '#/components/schemas/TokenResponse' '429': description: '**Too many requests.** We are rate-limiting everyone''s requests, please try again later.' '503': description: '**Service unavailable.** We have not configured a GitHub Access Token. This could be because we are experiencing technical difficulties or intentional. Please try again later.' /api/feedback/propose_edits: post: tags: - feedback summary: Post Edit-Requests description: '***Do not abuse this endpoint.*** This posts the actual feedback to GitHub and returns the github link. This API will create pull-requests instead of issues => only a subset of feedback is allowed. For this Endpoint to work, you need to generate a token via the [`/api/feedback/get_token`](#tag/feedback/operation/get_token) endpoint. # Note: Tokens are only used if we return a 201 Created response. Otherwise, they are still valid' operationId: propose_edits requestBody: content: application/json: schema: $ref: '#/components/schemas/EditRequest' required: true responses: '201': description: The edit request feedback has been **successfully posted to GitHub**. We return the link to the GitHub issue. content: text/plain: schema: type: string format: uri example: https://github.com/TUM-Dev/navigatum/issues/9 '400': description: '**Bad Request.** Not all fields in the body are present as defined above' '403': description: '**Forbidden.** Causes are (delivered via the body): - `Invalid token`: You have not supplied a token generated via the `gen_token`-Endpoint. - `Token not old enough, please wait`: Tokens are only valid after 10s. - `Token expired`: Tokens are only valid for 12h. - `Token already used`: Tokens are non reusable/refreshable single-use items.' '422': description: '**Unprocessable Entity.** Subject or body missing or too short.' '451': description: '**Unavailable for legal reasons.** Using this endpoint without accepting the privacy policy is not allowed. For us to post to GitHub, this has to be true' '500': description: '**Internal Server Error.** We have a problem communicating with GitHubs servers. Please try again later.' '503': description: Service unavailable. We have not configured a GitHub Access Token. This could be because we are experiencing technical difficulties or intentional. Please try again later. /api/locations/{id}: get: tags: - locations summary: Get entry-details description: 'This returns the full data available for the entry (room/building). This is more data, that should be supplied once a user clicks on an entry. Preloading this is not an issue on our end, but keep in mind bandwith constraints on your side. The data can be up to 50kB (using gzip) or 200kB unzipped. More about this data format is described in the NavigaTUM-data documentation' operationId: get_handler parameters: - name: id in: path description: ID of the location required: true schema: type: string - name: lang in: query description: The language you want your preview to be in. If either this or the query parameter is set to en, this will be delivered. required: false schema: type: string enum: - de - en responses: '200': description: '**Details** about the **location**' content: application/json: schema: $ref: '#/components/schemas/LocationDetailsResponse' '400': description: '**Bad request.** Make sure that requested item ID is not empty and not longer than 255 characters' content: text/plain: schema: type: string example: Invalid ID '404': description: '**Not found.** Make sure that requested item exists' content: text/plain: schema: type: string example: Not found /api/locations/{id}/nearby: get: tags: - locations summary: Get the nearby items description: Shows nearby POIs like public transport stations operationId: nearby_handler parameters: - name: id in: path description: ID of a location required: true schema: type: string responses: '200': description: Things **nearby to the location** content: application/json: schema: $ref: '#/components/schemas/NearbyLocationsResponse' '400': description: '**Bad request.** Make sure that requested item ID is not empty and not longer than 255 characters' content: text/plain: schema: type: string example: Invalid ID '404': description: '**Not found.** Make sure that requested item exists' content: text/plain: schema: type: string example: Not found /api/locations/{id}/preview: get: tags: - locations summary: Get a entry-preview description: 'This returns a 1200x630px preview for the location (room/building/..). This is usefully for implementing custom `OpenGraph` images for detail previews.' operationId: maps_handler parameters: - name: id in: path required: true schema: type: string - name: lang in: query required: false schema: type: string enum: - de - en - name: format in: query required: false schema: type: string enum: - open_graph - square responses: '200': description: '**Preview image**' content: image/png: {} '400': description: '**Bad request.** Make sure that requested item ID is not empty and not longer than 255 characters' content: text/plain: schema: type: string example: Invalid ID '404': description: '**Not found.** Make sure that requested item exists' content: text/plain: schema: type: string example: Not found /api/locations/{id}/qr-code: get: tags: - locations summary: Get a QR code for a location description: 'This returns a QR code image (PNG) that links to the location''s detail page. The QR code uses TUM blue (#0065bd) as foreground color with white background and rounded corners.' operationId: qr_code_handler parameters: - name: id in: path required: true schema: type: string responses: '200': description: '**QR code image**' content: image/png: {} '400': description: '**Bad request.** Make sure that requested item ID is not empty and not longer than 255 characters' content: text/plain: schema: type: string example: Invalid ID '500': description: '**Internal server error**' content: text/plain: schema: type: string /api/maps/route: get: tags: - maps summary: Routing requests description: "**API IS EXPERIMENTAL AND ACTIVELY SUBJECT TO CHANGE**\n\nThe user specifies using provided origin (`from`) and destination (`to`) locations and a transport mode (`route_costing`) to tune their routing between the two locations.\nThe costing is fine-tuned by the server side accordingly.\n\nInternally, this endpoint relies on\n- [Valhalla](https://github.com/valhalla/valhalla) for routing for route calculation\n- our database to resolve ids.\n\n You will need to look the ids up via [`/api/search`](#tag/locations/operation/search_handler) beforehand.\n **Note:** [`/api/search`](#tag/locations/operation/search_handler) does support both university internal routing and external addressing.\n\n**In the future (i.e. public transit routing currently is not implemented)**, it will als rely on either\n- [OpenTripPlanner2](https://www.opentripplanner.org/) or\n- [Motis](https://github.com/motis-project/motis)" operationId: route_handler parameters: - name: lang in: query required: false schema: type: string enum: - de - en - name: from in: query description: Start of the route required: true schema: oneOf: - $ref: '#/components/schemas/Coordinate' description: 'Either an - external address which was looked up or - the users current location' - type: string description: Our (uni internal) key for location identification - name: to in: query description: Destination of the route required: true schema: oneOf: - $ref: '#/components/schemas/Coordinate' description: 'Either an - external address which was looked up or - the users current location' - type: string description: Our (uni internal) key for location identification - name: route_costing in: query description: 'Transport mode the user wants to use If not specified, the default is based on how far the destinations are apart and requested time.' required: false schema: oneOf: - type: 'null' - type: string description: Transport mode the user wants to use enum: - pedestrian - bicycle - motorcycle - car - public_transit - name: pedestrian_type in: query description: Does the user have specific walking restrictions? required: false schema: type: string description: Does the user have specific walking needs? enum: - standard - blind - wheelchair - name: ptw_type in: query description: Does the user prefer mopeds or motorcycles for powered two-wheeled (ptw)? required: false schema: type: string description: Does the user have a moped or motorcycle enum: - motorcycle - moped - name: bicycle_type in: query description: Which kind of bicycle do you ride? required: false schema: type: string description: Which kind of bicycle do you ride? enum: - road - hybrid - cross - mountain - name: page_cursor in: query description: 'Cursor position for pagination Only avaliable for some costings' required: false schema: type: string nullable: true - name: time in: query description: 'Time for the route (ISO 8601 format) Used with `arrive_by` to determine if this is departure or arrival time' required: false schema: type: string format: date-time nullable: true - name: arrive_by in: query description: Whether the time parameter represents arrival time (true) or departure time (false/not set) required: false schema: type: boolean responses: '200': description: '**Routing solution**' content: application/json: schema: $ref: '#/components/schemas/RoutingResponse' '404': description: '**Not found.** The requested location does not exist' content: text/plain: schema: type: string example: Not found /api/openapi.json: get: summary: Openapi service definition description: Usefull for consuming in external openapi tooling operationId: openapi_doc responses: '200': description: The openapi definition content: application/json: {} /api/search: get: tags: - locations summary: Search entries description: 'This endpoint is designed to support search-as-you-type results. Instead of simply returning a list, the search results are returned in a way to provide a richer experience by splitting them up into sections. You might not necessarily need to implement all types of sections, or all sections features (if you just want to show a list). The order of sections is a suggested order to display them, but you may change this as you like. Some fields support highlighting the query terms and it uses \x19 and \x17 to mark the beginning/end of a highlighted sequence. (See [Wikipedia](https://en.wikipedia.org/wiki/C0_and_C1_control_codes#Modified_C0_control_code_sets)). Some text-renderers will ignore them, but in case you do not want to use them, you might want to remove them from the responses via empty `pre_highlight` and `post_highlight` query parameters.' operationId: search_handler parameters: - name: q in: query description: 'string you want to search for. The amounts returned can be controlled using the `limit_*` parameters. Use `in`, `usage`, `type`, and `near` query parameters for filtering.' required: true schema: type: string - name: in in: query description: 'Filter by parent (building, campus, etc.). Can be repeated for multiple values (e.g. `&in=garching&in=5304`).' required: false schema: type: array items: type: string - name: usage in: query description: 'Filter by usage type (e.g. `wc`, `büro`). Can be repeated for multiple values.' required: false schema: type: array items: type: string - name: type in: query description: 'Filter by facet. Can be repeated for multiple values. Unknown values cause a `400`.' required: false schema: type: array items: $ref: '#/components/schemas/FacetFilter' - name: near in: query description: Sort results by distance to a coordinate (`lat,lon`). required: false schema: type: string - name: search_addresses in: query description: 'Include adresses in the saerch Be aware that Nominatim (which we use to do this search) is really slow (~100ms). Only activate this when you really need it.' required: false schema: type: boolean - name: limit_sites in: query description: 'Maximum number of sites (campus / site / area) to return. Clamped to `0`..`1000`. If this is a problem for you, please open an issue.' required: false schema: type: integer minimum: 0 - name: limit_buildings in: query description: 'Maximum number of buildings to return. Clamped to `0`..`1000`. If this is a problem for you, please open an issue.' required: false schema: type: integer minimum: 0 - name: limit_rooms in: query description: 'Maximum number of rooms to return. Clamped to `0`..`1000`. If this is an problem for you, please open an issue.' required: false schema: type: integer minimum: 0 - name: limit_pois in: query description: 'Maximum number of POIs (points of interest) to return. Clamped to `0`..`1000`. If this is a problem for you, please open an issue.' required: false schema: type: integer minimum: 0 - name: limit_all in: query description: 'Maximum number of results to return. Clamped to `1`..`1000`. If this is an problem for you, please open an issue.' required: false schema: type: integer minimum: 0 - name: pre_highlight in: query description: 'string to include in front of highlighted sequences. If this and `post_highlight` are empty, highlighting is disabled. For background on the default values, please see [Wikipedia](https://en.wikipedia.org/wiki/C0_and_C1_control_codes#Modified_C0_control_code_sets)).' required: false schema: type: string - name: post_highlight in: query description: 'string to include after the highlighted sequences. If this and `pre_highlight` are empty, highlighting is disabled. For background on the default values, please see [Wikipedia](https://en.wikipedia.org/wiki/C0_and_C1_control_codes#Modified_C0_control_code_sets)).' required: false schema: type: string - name: cropping in: query description: 'How to handle cropping of long building names in `parsed_id`. - `crop` (default): crop long names (> 25 chars) with an ellipsis. - `full`: never crop; always show full building names.' required: false schema: type: string description: Controls whether long building names inside `parsed_id` are cropped. enum: - crop - full - name: parsed_id in: query description: 'How to format `parsed_id` for rooms. - `prefixed` (default): add common building prefixes (e.g. `MW 1801`). - `roomfinder`: return room codes in Roomfinder format (`archname@building_id`).' required: false schema: type: string description: Controls how `parsed_id` is built for room results. enum: - prefixed - roomfinder responses: '200': description: Search entries content: application/json: schema: $ref: '#/components/schemas/SearchResponse' '400': description: '**Bad Request.** Not all fields in the body are present as defined above' content: text/plain: schema: type: string example: 'Query deserialize error: invalid digit found in string' '404': description: '**Not found.** `q` is empty. Since searching for nothing is nonsensical, we dont support this.' content: text/plain: schema: type: string example: Not found '414': description: '**URI Too Long.** The uri you are trying to request is unreasonably long. Search querys dont have thousands of chars..' content: text/plain: schema: type: string /api/status: get: summary: API healthcheck description: 'If this endpoint does not return 200, the API is experiencing a catastrophic outage. **Should never happen.**' operationId: health_status_handler responses: '200': description: API is **healthy** content: text/plain: schema: type: string example: 'healthy source_code: https://github.com/TUM-Dev/navigatum/tree/{hash}' '503': description: API is **NOT healthy** content: text/plain: schema: type: string example: 'unhealthy source_code: https://github.com/TUM-Dev/navigatum/tree/{hash}' components: schemas: AlertCauseResponse: type: string enum: - unknown_cause - other_cause - technical_problem - strike - demonstration - accident - holiday - weather - maintenance - construction - police_activity - medical_emergency AlertEffectResponse: type: string enum: - no_service - reduced_service - significant_delays - detour - additional_service - modified_service - other_effect - unknown_effect - stop_moved - no_effect - accessibility_issue AlertResponse: type: object required: - description_text - header_text properties: cause: oneOf: - type: 'null' - $ref: '#/components/schemas/AlertCauseResponse' cause_detail: type: string description: "Description of the cause of the alert that allows for\n agency-specific language; more specific than the Cause." nullable: true description_text: type: string description: "Description for the alert.\nThis plain-text string will be formatted as the body of the alert\n (or shown on an explicit \"expand\" request by the user).\n The information in the description should add to the information of\n the header." effect: oneOf: - type: 'null' - $ref: '#/components/schemas/AlertEffectResponse' effect_detail: type: string description: "Description of the effect of the alert that allows for\n agency-specific language; more specific than the Effect." nullable: true header_text: type: string description: "Header for the alert. This plain-text string will be highlighted,\n for example in boldface." image_alternative_text: type: string description: "Text describing the appearance of the linked image in the image\n field (e.g., in case the image can't be displayed or the\n user can't see the image for accessibility reasons). See the\n HTML spec for alt image text." nullable: true image_media_type: type: string description: "IANA media type as to specify the type of image to be displayed. The\n type must start with \"image/\"" nullable: true image_url: type: string description: String containing an URL linking to an image. nullable: true severity_level: oneOf: - type: 'null' - $ref: '#/components/schemas/AlertSeverityLevelResponse' url: type: string description: The URL which provides additional information about the alert. nullable: true AlertSeverityLevelResponse: type: string enum: - unknown - info - warning - severe Arguments: type: object required: - ids - start_after - end_before properties: end_before: type: string format: date-time description: The last allowed time the calendar would like to display examples: - '2039-01-19T03:14:07+01:00' - 2042-01-07T00:00:00 UTC ids: type: array items: type: string description: 'ids you want the calendars for Limit of max. 10 ids is arbitraryly chosen, if you need this limit increased, please contact us' example: - 5605.EG.011 - 5510.02.001 - 5606.EG.036 - '5304' maxItems: 10 minItems: 1 start_after: type: string format: date-time description: The first allowed time the calendar would like to display examples: - '2039-01-19T03:14:07+01:00' - 2042-01-07T00:00:00 UTC BuildingKind: type: string enum: - building - joined_building - area BuildingsOverviewItemResponse: type: object required: - id - name - subtext properties: id: type: string description: The id of the entry name: type: string description: Human display name subtext: type: string description: What should be displayed below this Building thumb: type: string description: The thumbnail for the building nullable: true BuildingsOverviewResponse: type: object required: - entries - n_visible properties: entries: type: array items: $ref: '#/components/schemas/BuildingsOverviewItemResponse' n_visible: type: integer format: int32 minimum: 0 CalendarLocationResponse: type: object required: - key - name - last_calendar_scrape_at - type_common_name - type properties: calendar_url: type: string description: Link to the calendar of the room examples: - https://campus.tum.de/tumonline/tvKalender.wSicht?cOrg=19691&cRes=12543&cReadonly=J - https://campus.tum.de/tumonline/tvKalender.wSicht?cOrg=19691&cRes=12559&cReadonly=J nullable: true key: type: string description: 'Structured, globaly unique room code Included to enable multi-room calendars. Format: BUILDING.LEVEL.NUMBER' examples: - 5602.EG.001 - 5121.EG.003 last_calendar_scrape_at: type: string format: date-time description: last time the calendar was scraped for this room examples: - '2039-01-19T03:14:07+01:00' - 2042-01-07T00:00:00 UTC name: type: string description: name of the entry in a human-readable form examples: - 5602.EG.001 (MI HS 1, Friedrich L. Bauer Hörsaal) - 5121.EG.003 (Computerraum) type: type: string description: 'type of the entry TODO document as a n enum with the following choices: - `room` - `building` - `joined_building` - `area` - `site` - `campus` - `poi`' examples: - room - building - joined_building - area - site - campus - poi type_common_name: type: string description: Type of the entry in a human-readable form examples: - Serverraum - Büro ComputedPropResponse: type: object required: - name - text properties: extra: oneOf: - type: 'null' - $ref: '#/components/schemas/ExtraComputedPropResponse' name: type: string examples: - Raumkennung text: type: string examples: - 5602.EG.001 Coordinate: type: object required: - lat - lon properties: lat: type: number format: double description: Latitude example: 48.26244490906312 lon: type: number format: double description: Longitude example: 48.26244490906312 CoordinateAccuracyResponse: type: string enum: - building CoordinateResponse: type: object required: - lat - lon - source properties: accuracy: oneOf: - type: 'null' - $ref: '#/components/schemas/CoordinateAccuracyResponse' description: 'How accurate the coordinate is. Only present, if it is limited to a degree (e.g. we only know the building)' lat: type: number format: double description: Latitude example: 48.26244490906312 lon: type: number format: double description: Longitude example: 48.26244490906312 source: $ref: '#/components/schemas/CoordinateSourceResponse' description: Source of the Coordinates CoordinateSourceResponse: type: string enum: - navigatum - roomfinder - inferred DefaultMapsResponse: type: string enum: - interactive - roomfinder DirectionResponse: type: string enum: - depart - hard_left - left - slightly_left - continue - slightly_right - right - hard_right - circle_clockwise - circle_counterclockwise - stairs - elevator - uturn_left - uturn_right EditRequest: type: object required: - token - additional_context - privacy_checked properties: additional_context: type: string description: 'Additional context for the edit. Will be displayed in the discription field of the PR' example: I have a picture of the room, please add it to the roomfinder additions: $ref: '#/components/schemas/LimitedHashMap_String_Addition' description: New rooms/buildings/POIs to add. Keyed by the new entry's ID. Validated server-side. edits: $ref: '#/components/schemas/LimitedHashMap_String_Edit' description: The edits to be made to the room. The keys are the ID of the props to be edited, the values are the proposed Edits. privacy_checked: type: boolean description: 'Whether the user has checked the privacy-checkbox. We are posting the feedback publicly on GitHub (not a EU-Company). **You MUST also include such a checkmark.**' token: type: string description: The JWT token, that can be used to generate feedback example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2Njk2MzczODEsImlhdCI6MTY2OTU5NDE4MSwibmJmIjoxNjY5NTk0MTkxLCJraWQiOjE1ODU0MTUyODk5MzI0MjU0Mzg2fQ.sN0WwXzsGhjOVaqWPe-Fl5x-gwZvh28MMUM-74MoNj4 EventResponse: type: object required: - id - room_code - start_at - end_at - title_de - title_en - entry_type - detailed_entry_type properties: detailed_entry_type: type: string description: For some Entrys, we do have more information (what kind of a `lecture` is it? What kind of an other `entry` is it?) examples: - Abhaltung end_at: type: string format: date-time description: end of the entry examples: - 2019-01-01 00:00:00 entry_type: $ref: '#/components/schemas/EventTypeResponse' description: 'What this calendar entry means. Each of these should be displayed in a different color' id: type: integer format: int32 description: ID of the calendar entry used in `TUMonline` internally examples: - 6424 room_code: type: string description: 'Structured, globaly unique room code Included to enable multi-room calendars. Format: BUILDING.LEVEL.NUMBER' examples: - 5602.EG.001 - 5121.EG.003 start_at: type: string format: date-time description: start of the entry examples: - 2018-01-01 00:00:00 stp_type: type: string description: Lecture-type examples: - Vorlesung mit Zentralübung nullable: true title_de: type: string description: German title of the Entry examples: - Quantenteleportation title_en: type: string description: English title of the Entry examples: - Quantum teleportation EventTypeResponse: type: string enum: - lecture - exercise - exam - barred - other ExtraComputedPropResponse: type: object required: - body properties: body: type: string examples: - 'for exams: 102 in tight, 71 in wide, 49 in corona' footer: type: string examples: - data based on a Survey of chimneysweeps nullable: true header: type: string examples: - Genauere Angaben nullable: true FacetFilter: type: string description: 'Allowlisted values for the `?type=` query parameter. Modeled as an enum so `serde` rejects unknown values with a 400 instead of silently dropping them, and so the `OpenAPI` schema advertises the exact set of accepted values.' enum: - site - building - room - poi FeaturedOverviewItemResponse: type: object required: - id - name - subtext - image_url properties: id: type: string description: The id of the entry image_url: type: string description: The thumbnail for the building name: type: string description: Human display name subtext: type: string description: What should be displayed below this Building FeaturedOverviewResponse: type: object required: - entries properties: entries: type: array items: $ref: '#/components/schemas/FeaturedOverviewItemResponse' FeedbackCategory: type: string enum: - bug - feature - search - navigation - entry - general - other FloorResponse: type: object required: - id - short_name - name - tumonline - type properties: id: type: integer format: int32 description: 'Virtual ID for sorting `0` represents the ground floor. Numbers above/below represent where they are relative to the ground floor **WARNING**: This ID is not guaranteed to be stable. Not across buildings, nor within a building.' examples: - -1 - 0 - 1 - 2 - 3 name: type: string description: Longer name of the floor examples: - 1st basement floor - Ground floor - 1st mezzanine, above ground floor short_name: type: string description: Short name of the floor examples: - '-1' - '0' - Z1 tumonline: type: string description: How `TUMonline` names the floor examples: - U1 - EG - Z1 type: $ref: '#/components/schemas/FloorType' description: Type of floor FloorType: type: string enum: - roof - upper - semi_upper - ground - semi_basement - basement GenericProp: type: object required: - name - text properties: name: $ref: '#/components/schemas/TranslatableStr' text: type: string Image: type: object required: - content - metadata properties: content: type: string description: The image encoded as base64 contentEncoding: base64 metadata: $ref: '#/components/schemas/ImageMetadata' ImageInfoResponse: type: object description: The information you need to request Images from the `/cdn/{size}/{id}_{counter}.webp` endpoint required: - name - author - license properties: author: $ref: '#/components/schemas/URLRefResponse' license: $ref: '#/components/schemas/PossibleURLRefResponse' name: type: string description: 'The name of the image file. consists of {`building_id`}_{`image_id}.webp`, where `image_id` is a counter starting at 0' examples: - mi_0.webp ImageMetadata: type: object required: - author - license properties: author: type: string description: Who created the image license: $ref: '#/components/schemas/Property' description: The license under which the image is distributed offsets: oneOf: - type: 'null' - $ref: '#/components/schemas/Offsets' description: Advanced metadata to control how the image is displayed ItineraryResponse: type: object required: - duration - end_time - legs - start_time - transfer_count properties: duration: type: integer format: int64 description: journey duration in seconds end_time: type: string format: date-time description: journey arrival time legs: type: array items: $ref: '#/components/schemas/MotisLegResponse' description: Journey legs start_time: type: string format: date-time description: journey departure time transfer_count: type: integer format: int64 description: The number of transfers this trip has. LimitedHashMap_String_Addition: type: object additionalProperties: oneOf: - allOf: - $ref: '#/components/schemas/NewRoom' - type: object required: - kind properties: kind: type: string enum: - room - allOf: - $ref: '#/components/schemas/NewBuilding' - type: object required: - kind properties: kind: type: string enum: - building - allOf: - $ref: '#/components/schemas/NewPoi' - type: object required: - kind properties: kind: type: string enum: - poi propertyNames: type: string LimitedHashMap_String_Edit: type: object additionalProperties: type: object properties: coordinate: oneOf: - type: 'null' - $ref: '#/components/schemas/Coordinate' image: oneOf: - type: 'null' - $ref: '#/components/schemas/Image' properties: type: array items: $ref: '#/components/schemas/PropertyEdit' nullable: true propertyNames: type: string LocationDetailsResponse: type: object required: - id - type - type_common_name - name - aliases - parents - parent_names - props - ranking_factors - sources - coords - maps properties: aliases: type: array items: type: string examples: - - 26503@5406 description: 'A list of alternative ids for this entry. Not to be confused with - `id` which is the unique identifier or - `visual-id` which is an alternative identifier for the entry (only displayed in the URL).' coords: $ref: '#/components/schemas/CoordinateResponse' description: Coordinate of the location id: type: string description: The id, that was requested examples: - 5606.EG.036 imgs: type: array items: $ref: '#/components/schemas/ImageInfoResponse' description: 'The information you need to request Images from the `/cdn/{size}/{id}_{counter}.webp` endpoint TODO: Sometimes missing, sometimes not.. so weird..' nullable: true maps: $ref: '#/components/schemas/MapsResponse' description: Print or overlay maps for said location name: type: string description: The name of the entry in a human-readable form examples: - 5606.EG.036 (Büro Fachschaft Mathe Physik Informatik Chemie / MPIC) parent_names: type: array items: type: string examples: - - Standorte - Garching Forschungszentrum - Fakultät Mathematik & Informatik (FMI oder MI) - Finger 06 (BT06) description: 'The ids of the parents. They are ordered as they would appear in a Breadcrumb menu. See `parents` for their actual ids.' minItems: 1 parents: type: array items: type: string examples: - - root - garching - mi - '5602' description: 'The ids of the parents. They are ordered as they would appear in a Breadcrumb menu. See `parent_names` for their human names.' minItems: 1 props: $ref: '#/components/schemas/PropsResponse' description: Data for the info-card table ranking_factors: $ref: '#/components/schemas/RankingFactorsResponse' redirect_url: type: string description: 'The url, this item should be displayed at. Present on both redirects and normal entries, to allow for the common /view/:id path' examples: - /room/5606.EG.036 sections: $ref: '#/components/schemas/SectionsResponse' description: 'Information for different sections on the page like the - buildings overview, - rooms overview and - featured view' sources: $ref: '#/components/schemas/SourcesResponse' description: Where we got our data from, should be displayed at the bottom of any page containing this data type: $ref: '#/components/schemas/LocationTypeResponse' description: The type of the entry type_common_name: type: string description: The type of the entry in a human-readable form examples: - Büro LocationEventsResponse: type: object required: - events - location properties: events: type: array items: $ref: '#/components/schemas/EventResponse' location: $ref: '#/components/schemas/CalendarLocationResponse' LocationTypeResponse: type: string enum: - room - building - joined_building - area - site - campus - poi - other ManeuverResponse: type: object required: - type - instruction - time_seconds - length_meters - begin_shape_index - end_shape_index - travel_mode properties: arrive_instruction: type: string description: 'Written arrive time instruction Typically used with a transit maneuver' examples: - 'Arrive: 8:10 AM at 34 St - Herald Sq' nullable: true begin_shape_index: type: integer description: Index into the list of shape points for the start of the maneuver example: 0 minimum: 0 begin_street_names: type: array items: type: string examples: - - Josef Fischaber Straße description: 'When present, these are the street names at the beginning (transition point) of the nonobvious maneuver (if they are different from the names that are consistent along the entire nonobvious maneuver)' nullable: true depart_instruction: type: string description: 'Written depart time instruction Typically used with a transit maneuver' examples: - 'Depart: 8:04 AM from 8 St - NYU' nullable: true end_shape_index: type: integer description: Index into the list of shape points for the end of the maneuver example: 3 minimum: 0 ferry: type: boolean description: '`true` if a ferry is encountered on this maneuver' nullable: true gate: type: boolean description: '`true` if a gate is encountered on this maneuver' nullable: true highway: type: boolean description: '`true` if a highway is encountered on this maneuver' nullable: true instruction: type: string length_meters: type: number format: double description: Maneuver length in meters example: 103.01 rough: type: boolean description: '`true` if the maneuver is unpaved or rough pavement, or has any portions that have rough pavement' nullable: true roundabout_exit_count: type: integer format: int64 description: The spoke to exit roundabout after entering example: 2 nullable: true street_names: type: array items: type: string examples: - - Münchnerstraße description: List of street names that are consistent along the entire nonobvious maneuver nullable: true time_seconds: type: number format: double description: Estimated time along the maneuver in seconds example: 201.025 toll: type: boolean description: '`true` if a toll booth is encountered on this maneuver' nullable: true transit_info: oneOf: - type: 'null' - $ref: '#/components/schemas/TransitInfoResponse' description: Contains the attributes that describe a specific transit route travel_mode: $ref: '#/components/schemas/TravelModeResponse' description: Travel mode type: $ref: '#/components/schemas/ManeuverTypeResponse' verbal_arrive_instruction: type: string description: 'Text suitable for use as a verbal arrive time instruction Typically used with a transit maneuver' examples: - Arrive at 8:10 AM at 34 St - Herald Sq nullable: true verbal_depart_instruction: type: string description: 'Text suitable for use as a verbal depart time instruction Typically used with a transit maneuver' examples: - Depart at 8:04 AM from 8 St - NYU nullable: true verbal_multi_cue: type: boolean description: '`true` if `verbal_pre_transition_instruction` has been appended with the verbal instruction of the next maneuver' nullable: true verbal_post_transition_instruction: type: string description: Text suitable for use as a verbal message immediately after the maneuver transition examples: - Continue on U.S. 2 22 for 3.9 miles nullable: true verbal_pre_transition_instruction: type: string description: Text suitable for use as a verbal message immediately prior to the maneuver transition examples: - Turn right onto North Prince Street, U.S. 2 22 nullable: true verbal_transition_alert_instruction: type: string description: 'Text suitable for use as a verbal alert in a navigation application The transition alert instruction will prepare the user for the forthcoming transition' examples: - Turn right onto North Prince Street nullable: true ManeuverTypeResponse: type: string enum: - none - start - start_right - start_left - destination - destination_right - destination_left - becomes - continue - slight_right - right - sharp_right - uturn_right - uturn_left - sharp_left - left - slight_left - ramp_straight - ramp_right - ramp_left - exit_right - exit_left - stay_straight - stay_right - stay_left - merge - roundabout_enter - roundabout_exit - ferry_enter - ferry_exit - transit - transit_transfer - transit_remain_on - transit_connection_start - transit_connection_transfer - transit_connection_destination - post_transit_connection_destination - merge_right - merge_left - elevator_enter - steps_enter - escalator_enter - building_enter - building_exit MapsResponse: type: object required: - default properties: default: $ref: '#/components/schemas/DefaultMapsResponse' description: type of the Map that should be shown by default overlays: oneOf: - type: 'null' - $ref: '#/components/schemas/OverlayMapsResponse' description: '`None` would mean no overlay maps are displayed by default. For rooms, you should add a warning that no floor map is available for this room' roomfinder: oneOf: - type: 'null' - $ref: '#/components/schemas/RoomfinderMapResponse' ModeResponse: type: string enum: - walk - bike - rental - car - car_parking - car_dropoff - odm - flex - transit - tram - subway - ferry - airplane - metro - bus - coach - rail - highspeed_rail - long_distance - night_rail - regional_fast_rail - regional_rail - cable_car - funicular - areal_lift - other MotisLegResponse: type: object required: - duration - end_time - from - to - leg_geometry - mode - real_time - scheduled - route_color - route_text_color - scheduled_end_time - scheduled_start_time - start_time properties: agency_id: type: string description: Identifies a transit brand which is often synonymous with a transit agency. nullable: true agency_name: type: string description: Full name of the transit agency nullable: true agency_url: type: string description: URL of the transit agency nullable: true alerts: type: array items: $ref: '#/components/schemas/AlertResponse' description: Alerts for this stop. cancelled: type: boolean description: Whether this trip is cancelled nullable: true distance: type: number format: double description: Distance in meters nullable: true duration: type: integer format: int64 description: "Leg duration in seconds\n\nIf leg is footpath:\n The footpath duration is derived from the default footpath\n duration using the query parameters `transferTimeFactor` and\n `additionalTransferTime` as follows:\n `leg.duration = defaultDuration * transferTimeFactor +\n additionalTransferTime.` In case the defaultDuration is\n needed, it can be calculated by `defaultDuration =\n (leg.duration - additionalTransferTime) / transferTimeFactor`.\n Note that the default values are `transferTimeFactor = 1` and\n `additionalTransferTime = 0` in case they are not explicitly\n provided in the query." end_time: type: string format: date-time description: leg arrival time from: $ref: '#/components/schemas/PlaceResponse' headsign: type: string description: 'For transit legs, the headsign of the bus or train being used. For non-transit legs, null' nullable: true interline_with_previous_leg: type: boolean description: "For transit legs, if the rider should stay on the vehicle as it\n changes route names." nullable: true intermediate_stops: type: array items: $ref: '#/components/schemas/PlaceResponse' description: "For transit legs, intermediate stops between the Place where the leg\n originates and the Place where the leg ends. For non-transit\n legs, null." leg_geometry: type: string description: Polyline geometry (precision 6) of the leg. mode: $ref: '#/components/schemas/ModeResponse' real_time: type: boolean description: Whether there is real-time data about this leg rental: oneOf: - type: 'null' - $ref: '#/components/schemas/RentalResponse' route_color: type: string description: 'Route color designation that matches public facing material. Implementations should default to white (FFFFFF) when omitted or left empty. The color difference between `route_color` and `route_text_color` should provide sufficient contrast when viewed on a black and white screen.' route_short_name: type: string description: 'Short name of a route. Often a short, abstract identifier (e.g., "32", "100X", "Green") that riders use to identify a route' nullable: true route_text_color: type: string description: 'Legible color to use for text drawn against a background of `route_color`. Implementations should default to black (000000) when omitted or left empty. The color difference between `route_color` and `route_text_color` should provide sufficient contrast when viewed on a black and white screen.' route_type: type: integer format: int64 description: 'Indicates the type of transportation used on a route. According to `route_type` Valid options are: - 0: Tram, Streetcar, Light rail. Any light rail or street level system within a metropolitan area. - 1: Subway, Metro. Any underground rail system within a metropolitan area. - 2: Rail. Used for intercity or long-distance travel. - 3: Bus. Used for short- and long-distance bus routes. - 4: Ferry. Used for short- and long-distance boat service. - 5: Cable tram. Used for street-level rail cars where the cable runs beneath the vehicle (e.g., cable car in San Francisco). - 6: Aerial lift, suspended cable car (e.g., gondola lift, aerial tramway). Cable transport where cabins, cars, gondolas or open chairs are suspended by means of one or more cables. - 7: Funicular. Any rail system designed for steep inclines. - 11: Trolleybus. Electric buses that draw power from overhead wires using poles. - 12: Monorail. Railway in which the track consists of a single rail or a beam.' nullable: true scheduled: type: boolean description: "Whether this leg was originally scheduled to run or is an additional\n service.\n Scheduled times will equal realtime times in this case." scheduled_end_time: type: string format: date-time description: scheduled leg arrival time scheduled_start_time: type: string format: date-time description: scheduled leg departure time source: type: string description: Filename and line number where this trip is from nullable: true start_time: type: string format: date-time description: leg departure time steps: type: array items: $ref: '#/components/schemas/StepInstructionResponse' description: 'A series of turn by turn instructions used for walking, biking and driving.' to: $ref: '#/components/schemas/PlaceResponse' trip_id: type: string description: Identifies a trip nullable: true MotisRoutingResponse: type: object required: - direct - itineraries - next_page_cursor - previous_page_cursor properties: direct: type: array items: $ref: '#/components/schemas/ItineraryResponse' description: "Direct trips by `WALK`, `BIKE`, `CAR`, etc. without time-dependency.\n\n The starting time (`arriveBy=false`) / arrival time\n (`arriveBy=true`) is always the queried `time` parameter (set to\n \"now\" if not set). But all `direct` connections are meant\n to be independent of absolute times." itineraries: type: array items: $ref: '#/components/schemas/ItineraryResponse' description: list of itineraries next_page_cursor: type: string description: "Use the cursor to get the next page of results.\n\nInsert the cursor\n into the request and post it to get the next page.\n The next page is a set of itineraries departing AFTER the last\n itinerary in this result." previous_page_cursor: type: string description: "Use the cursor to get the previous page of results. Insert the\n cursor into the request and post it to get the previous page.\n The previous page is a set of itineraries departing BEFORE the first\n itinerary in the result for a depart after search. When using the\n default sort order the previous set of itineraries is inserted\n before the current result." NearbyLocationsResponse: type: object required: - public_transport properties: public_transport: type: array items: $ref: '#/components/schemas/TransportationResponse' maxItems: 50 NewBuilding: type: object required: - parent_id - node_kind - building_prefixes - name - coords properties: building_prefixes: type: array items: type: string coords: $ref: '#/components/schemas/Coordinate' internal_id: type: string nullable: true name: type: string node_kind: $ref: '#/components/schemas/BuildingKind' parent_id: type: string short_name: type: string nullable: true visible_id: type: string nullable: true NewPoi: type: object required: - parent - name - usage_name - coords properties: comment: oneOf: - type: 'null' - $ref: '#/components/schemas/TranslatableStr' coords: $ref: '#/components/schemas/Coordinate' generic_props: type: array items: $ref: '#/components/schemas/GenericProp' links: type: array items: $ref: '#/components/schemas/PoiLink' name: type: string parent: type: string usage_name: type: string NewRoom: type: object required: - parent_building_id - alt_name - arch_name - usage_id - coords properties: address: oneOf: - type: 'null' - $ref: '#/components/schemas/RoomAddress' alt_name: type: string arch_name: type: string coords: $ref: '#/components/schemas/Coordinate' floor_level: type: string nullable: true floor_type: type: string nullable: true links: type: array items: $ref: '#/components/schemas/RoomLink' parent_building_id: type: string seats: oneOf: - type: 'null' - $ref: '#/components/schemas/Seats' usage_id: type: integer format: int32 minimum: 0 Offsets: type: object properties: header: type: integer format: int32 nullable: true thumb: type: integer format: int32 nullable: true OperatorResponse: type: object description: Operator of a location required: - id - url - code - name properties: code: type: string description: designation code of the operator examples: - TUS7000 id: type: integer format: int32 description: ID of the operator examples: - 51901 minimum: 0 name: type: string description: "The full name of the operator (localized). Null for organisations that\n are no longer active (e.g. id=38698), but where the operator has not been\nupdated in `TUMonline`." examples: - TUM School of Social Sciences and Technology url: type: string description: Link to the operator examples: - https://campus.tum.de/tumonline/webnav.navigate_to?corg=51901 OverlayMapEntryResponse: type: object required: - id - floor - name - file - coordinates properties: coordinates: type: array items: type: array items: false prefixItems: - type: number format: double - type: number format: double description: Coordinates are four `[lon, lat]` pairs, for the top left, top right, bottom right, bottom left image corners. example: - - 11.666739 - 48.263478 - - 11.669666 - 48.263125 - - 11.669222 - 48.261585 - - 11.666331 - 48.261929 maxItems: 4 minItems: 4 file: type: string description: filename of the map example: webp/rf95.webp floor: type: string description: 'Floor of the Map. Should be used for display to the user in selectors. Matches the floor part of the `TUMonline` roomcode.' example: EG id: type: integer format: int32 description: 'Machine-readable floor-id of the map. Should start with 0 for the ground level (defined by the main entrance) and increase or decrease. It is not guaranteed that numbers are consecutive or that `1` corresponds to level `01`, because buildings sometimes have more complicated layouts. They are however always in the correct (physical) order.' example: 0 name: type: string description: human-readable name of the map example: MI Gebäude (EG) OverlayMapsResponse: type: object required: - available properties: available: type: array items: $ref: '#/components/schemas/OverlayMapEntryResponse' default: type: integer format: int32 description: 'The floor-id of the map, that should be shown as a default. null means: - We suggest, you don''t show a map by default. - This is only the case for buildings or other such entities and not for rooms, if we know where they are and a map exists' example: 0 nullable: true PlaceResponse: type: object required: - lat - level - lon - name properties: alerts: type: array items: $ref: '#/components/schemas/AlertResponse' description: Alerts for this stop. arrival: type: string format: date-time description: arrival time nullable: true cancelled: type: boolean description: Whether this stop is cancelled due to the realtime situation nullable: true departure: type: string format: date-time description: departure time nullable: true description: type: string description: description of the location that provides more detailed information nullable: true lat: type: number format: double level: type: number format: double lon: type: number format: double name: type: string description: name of the transit stop / `PoI` / address scheduled_arrival: type: string format: date-time description: scheduled arrival time nullable: true scheduled_departure: type: string format: date-time description: scheduled departure time nullable: true scheduled_track: type: string description: scheduled track from the static schedule timetable dataset nullable: true stop_id: type: string description: "The ID of the stop. This is often something that users don't care\n about." nullable: true track: type: string description: "The current track/platform information, updated with real-time\n updates if available. Can be missing if neither real-time\n updates nor the schedule timetable contains track information." nullable: true vertex_type: oneOf: - type: 'null' - $ref: '#/components/schemas/VertexTypeResponse' PoiLink: type: object required: - text - url properties: text: $ref: '#/components/schemas/TranslatableStr' url: type: string PossibleURLRefResponse: type: object description: A link with a localized link text and url required: - text properties: text: type: string url: type: string nullable: true PostFeedbackRequest: type: object required: - token - subject - body - privacy_checked - deletion_requested properties: body: type: string description: 'The body/description of the feedback Controll characters will be stripped, too long input truncated and newlines made to render in markdown' example: A clear description what happened where and how we should improve it maxLength: 1048576 minLength: 10 category: $ref: '#/components/schemas/FeedbackCategory' description: The category of the feedback. deletion_requested: type: boolean description: 'Whether the user has requested to delete the issue. This flag means: - If the user has requested to delete the issue, we will delete it from GitHub after processing it - If the user has not requested to delete the issue, we will not delete it from GitHub and it will remain as a closed issue.' privacy_checked: type: boolean description: 'Whether the user has checked the privacy-checkbox. We are posting the feedback publicly on GitHub (not a EU-Company). **You MUST also include such a checkmark.**' subject: type: string description: 'The subject/title of the feedback Controll characters will be stripped, too long input truncated and newlines made to render in markdown' example: A catchy title maxLength: 512 minLength: 4 token: type: string description: The JWT token, that can be used to generate feedback example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2Njk2MzczODEsImlhdCI6MTY2OTU5NDE4MSwibmJmIjoxNjY5NTk0MTkxLCJraWQiOjE1ODU0MTUyODk5MzI0MjU0Mzg2fQ.sN0WwXzsGhjOVaqWPe-Fl5x-gwZvh28MMUM-74MoNj4 Property: type: object required: - text properties: text: type: string url: type: string nullable: true PropertyEdit: oneOf: - type: object required: - type properties: name: type: string nullable: true short_name: type: string nullable: true type: type: string enum: - name - type: object required: - name_de - name_en - type properties: din_277: type: string nullable: true din_277_desc: type: string nullable: true name_de: type: string name_en: type: string type: type: string enum: - usage - type: object required: - text_de - text_en - url - type properties: text_de: type: string text_en: type: string type: type: string enum: - link url: type: string PropsResponse: type: object description: Data for the info-card table required: - computed properties: calendar_url: type: string description: Link to the calendar of the room examples: - https://campus.tum.de/tumonline/tvKalender.wSicht?cOrg=19691&cRes=12543&cReadonly=J - https://campus.tum.de/tumonline/tvKalender.wSicht?cOrg=19691&cRes=12559&cReadonly=J nullable: true comment: type: string description: 'A comment to show to an entry. It is used in the rare cases, where some aspect about the room/.. or its translation are misleading.' computed: type: array items: $ref: '#/components/schemas/ComputedPropResponse' floors: type: array items: $ref: '#/components/schemas/FloorResponse' description: 'A sorted (lowest floor first) list of floors For buildings, this may contain multiple floors while rooms usually only have one floor.' links: type: array items: $ref: '#/components/schemas/PossibleURLRefResponse' operator: oneOf: - type: 'null' - $ref: '#/components/schemas/OperatorResponse' description: The operator of the room RankingFactorsResponse: type: object required: - rank_combined - rank_type - rank_usage properties: rank_boost: type: integer format: int32 minimum: 0 nullable: true rank_combined: type: integer format: int32 minimum: 0 rank_custom: type: integer format: int32 minimum: 0 nullable: true rank_type: type: integer format: int32 minimum: 0 rank_usage: type: integer format: int32 minimum: 0 RentalFormFactorResponse: type: string enum: - bicycle - cargo_bicycle - car - moped - scooter_standing - scooter_seated - other RentalResponse: type: object required: - system_id properties: form_factor: oneOf: - type: 'null' - $ref: '#/components/schemas/RentalFormFactorResponse' from_station_name: type: string description: "Name of the station where the vehicle is picked up (empty for free\n floating vehicles)" nullable: true rental_uri_android: type: string description: "Rental URI for Android (deep link to the specific station or\n vehicle)" nullable: true rental_uri_ios: type: string description: Rental URI for iOS (deep link to the specific station or vehicle) nullable: true rental_uri_web: type: string description: Rental URI for web (deep link to the specific station or vehicle) nullable: true station_name: type: string description: Name of the station nullable: true system_id: type: string description: Vehicle share system ID system_name: type: string description: Vehicle share system name nullable: true to_station_name: type: string description: "Name of the station where the vehicle is returned (empty for free\n floating vehicles)" nullable: true url: type: string description: URL of the vehicle share system nullable: true ResultEntry: type: object required: - id - type - name - subtext properties: id: type: string description: The id of the location example: 5510.03.002 name: type: string description: 'Subtext to show below the search result. Usually contains the context of where this rooms is located in. Currently not highlighted.' example: "5510.03.002 (\x19MW\x17 2001, Empore)" parsed_id: type: string description: 'This is an optional feature, that is only supported for some rooms. It might be displayed instead or before the name, to show that a different room id format has matched, that was probably used. See the image below for an example. It will be cropped to a maximum length to not take too much space in UIs. Supports highlighting.' nullable: true subtext: type: string description: 'Subtext to show below the search result. Usually contains the context of where this rooms is located in. Currently not highlighted.' example: Maschinenwesen (MW) subtext_bold: type: string description: 'Subtext to show below the search (by default in bold and after the non-bold subtext). Usually contains the arch-id of the room, which is another common room id format, and supports highlighting.' example: 3002@5510 nullable: true type: type: string description: the type of the site/building example: room ResultFacet: type: string enum: - sites - buildings - rooms - pois - addresses ResultsSection: type: object required: - facet - entries - n_visible - estimatedTotalHits properties: entries: type: array items: $ref: '#/components/schemas/ResultEntry' estimatedTotalHits: type: integer description: The estimated (not exact) number of hits for that query example: 6 minimum: 0 facet: $ref: '#/components/schemas/ResultFacet' description: These indicate the type of item this represents n_visible: type: integer description: 'A recommendation how many of the entries should be displayed by default. The number is usually from `0`..`5`. More results might be displayed when clicking "expand".' example: 4 minimum: 0 RoomAddress: type: object required: - place - street - zip_code properties: place: type: string street: type: string zip_code: type: string RoomLink: type: object required: - text_de - text_en - url properties: text_de: type: string text_en: type: string url: type: string RoomfinderMapEntryResponse: type: object required: - name - id - scale - height - width - x - y - source - file properties: file: type: string description: Where the map is stored height: type: integer format: int32 description: Map image y dimensions id: type: string description: machine-readable name of the map name: type: string description: human-readable name of the map scale: type: string description: Scale of the map. 2000 means 1:2000 source: type: string description: Where the map was imported from width: type: integer format: int32 description: Map image y dimensions x: type: integer format: int32 description: x Position on map image y: type: integer format: int32 description: y Position on map image RoomfinderMapResponse: type: object required: - default - available properties: available: type: array items: $ref: '#/components/schemas/RoomfinderMapEntryResponse' default: type: string description: The id of the map, that should be shown as a default examples: - rf142 RoomsOverviewResponse: type: object required: - usages properties: usages: type: array items: $ref: '#/components/schemas/RoomsOverviewUsageResponse' RoomsOverviewUsageChildResponse: type: object required: - id - name properties: id: type: string name: type: string RoomsOverviewUsageResponse: type: object required: - name - count - children properties: children: type: array items: $ref: '#/components/schemas/RoomsOverviewUsageChildResponse' count: type: integer format: int32 minimum: 0 name: type: string RoutingResponse: oneOf: - allOf: - $ref: '#/components/schemas/ValhallaRoutingResponse' - type: object required: - router properties: router: type: string enum: - valhalla - allOf: - $ref: '#/components/schemas/MotisRoutingResponse' - type: object required: - router properties: router: type: string enum: - motis SearchResponse: type: object description: Returned search results by this required: - sections - time_ms properties: sections: type: array items: $ref: '#/components/schemas/ResultsSection' time_ms: type: integer format: int32 description: 'Time the search took in the server side, not including network delay Maximum as timeout. other timeouts (browser, your client) may be smaller. Expected average is `10`..`50` for uncached, regular requests.' example: 8 minimum: 0 Seats: type: object properties: sitting: type: integer format: int32 minimum: 0 nullable: true standing: type: integer format: int32 minimum: 0 nullable: true wheelchair: type: integer format: int32 minimum: 0 nullable: true SectionsResponse: type: object properties: buildings_overview: oneOf: - type: 'null' - $ref: '#/components/schemas/BuildingsOverviewResponse' featured_overview: oneOf: - type: 'null' - $ref: '#/components/schemas/FeaturedOverviewResponse' rooms_overview: oneOf: - type: 'null' - $ref: '#/components/schemas/RoomsOverviewResponse' SourceResponse: type: object required: - name properties: name: type: string description: Name of the provider example: NavigaTUM url: type: string description: Url of the provider example: https://nav.tum.de nullable: true SourcesResponse: type: object description: Where we got our data from, should be displayed at the bottom of any page containing this data required: - base properties: base: type: array items: $ref: '#/components/schemas/SourceResponse' description: What is the basis of the data we have patched: type: boolean description: 'Was this entry patched by us? (e.g. to fix a typo in the name/...) If so, we should not display the source, as it is not the original source.' nullable: true StepInstructionResponse: type: object required: - area - distance - exit - from_level - polyline - relative_direction - stay_on - street_name - to_level properties: access_restriction: type: string description: 'Experimental. Indicates whether access to this part of the route is restricted. See: ' nullable: true area: type: boolean description: 'Not implemented! This step is on an open area, such as a plaza or train platform, and thus the directions should say something like "cross"' distance: type: number format: double elevation_down: type: integer format: int64 description: decline in meters across this path segment nullable: true elevation_up: type: integer format: int64 description: incline in meters across this path segment nullable: true exit: type: string description: 'Not implemented! When exiting a highway or traffic circle, the exit name/number.' from_level: type: number format: double osm_way: type: integer format: int64 description: OpenStreetMap way index nullable: true polyline: type: string description: Polyline geometry (precision 6) of the leg. relative_direction: $ref: '#/components/schemas/DirectionResponse' stay_on: type: boolean description: "Indicates whether or not a street changes direction at an\n intersection." street_name: type: string description: The name of the street. to_level: type: number format: double toll: type: boolean description: "Indicates that a fee must be paid by general traffic to use a road,\n road bridge or road tunnel." nullable: true SummaryResponse: type: object required: - time_seconds - length_meters - has_toll - has_highway - has_ferry - min_lat - min_lon - max_lat - max_lon properties: has_ferry: type: boolean description: if the path uses one or more ferry segments has_highway: type: boolean description: If the path uses one or more highway segments has_toll: type: boolean description: If the path uses one or more toll segments length_meters: type: number format: double description: Distance traveled in meters example: 103.01 max_lat: type: number format: double description: Maximum latitude of the sections bounding box example: 48.26244490906312 max_lon: type: number format: double description: Maximum longitude of the sections bounding box example: 48.26244490906312 min_lat: type: number format: double description: Minimum latitude of the sections bounding box example: 48.26244490906312 min_lon: type: number format: double description: Minimum longitude of the sections bounding box example: 48.26244490906312 time_seconds: type: number format: double description: Estimated elapsed time in seconds example: 201.025 TokenResponse: type: object required: - created_at - token properties: created_at: type: integer format: int64 description: Unix timestamp of when the token was created example: '1629564181' token: type: string description: The JWT token, that can be used to generate feedback example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2Njk2MzczODEsImlhdCI6MTY2OTU5NDE4MSwibmJmIjoxNjY5NTk0MTkxLCJraWQiOjE1ODU0MTUyODk5MzI0MjU0Mzg2fQ.sN0WwXzsGhjOVaqWPe-Fl5x-gwZvh28MMUM-74MoNj4 TransitInfoResponse: type: object required: - onestop_id - short_name - long_name - headsign - color - text_color - description - operator_onestop_id - operator_name - operator_url - transit_stops properties: color: type: integer format: int32 description: 'The numeric color value associated with a transit route The value for yellow would be `16567306`' examples: - 16567306 description: type: string description: The description of the transit route examples: - 'Trains operate from Ditmars Boulevard, Queens, to Stillwell Avenue, Brooklyn, at all times N trains in Manhattan operate along Broadway and across the Manhattan Bridge to and from Brooklyn. Trains in Brooklyn operate along 4th Avenue, then through Borough Park to Gravesend. Trains typically operate local in Queens, and either express or local in Manhattan and Brooklyn, depending on the time. Late night trains operate via Whitehall Street, Manhattan. Late night service is local' headsign: type: string description: The sign on a public transport vehicle that identifies the route destination to passengers examples: - ASTORIA - DITMARS BLVD long_name: type: string description: Long name describing the transit route examples: - Broadway Express onestop_id: type: string description: 'Global transit route identifier **Tipp:** you use these as feed-ids in transitland. Example: ' examples: - f-9q9-bart - f-zeus~schwäbisch~gmünd~gbfs operator_name: type: string description: 'Operator/agency name Short name is used over long name' examples: - BART - King County Marine Division - Münchner Verkehrs- und Tarifverbund (MVV) operator_onestop_id: type: string description: 'Global operator/agency identifier **Tipp:** you use these as feed-ids in transitland. Example: ' examples: - o-u281z9-mvv operator_url: type: string description: Operator/agency URL examples: - http://web.mta.info/ - http://www.mvv-muenchen.de/ short_name: type: string description: Short name describing the transit route examples: - N text_color: type: string description: 'The numeric text color value associated with a transit route The value for black would be `0`' examples: - 0 transit_stops: type: array items: $ref: '#/components/schemas/TransitStopResponse' description: A list of the stops/stations associated with a specific transit route TransitStopResponse: type: object required: - type - name - arrival_date_time - departure_date_time - is_parent_stop - assumed_schedule - lat - lon properties: arrival_date_time: type: string format: date-time description: Arrival date and time assumed_schedule: type: boolean description: '`true` if the times are based on an assumed schedule because the actual schedule is not known' departure_date_time: type: string format: date-time description: Departure date and time is_parent_stop: type: boolean description: '`true` if this stop is a marked as a parent stop' lat: type: number format: double description: Latitude of the transit stop in degrees example: 48.26244490906312 lon: type: number format: double description: Longitude of the transit stop in degrees example: 48.26244490906312 name: type: string description: Name of the stop or station examples: - 14 St - Union Sq type: $ref: '#/components/schemas/TransitStopTypeResponse' TransitStopTypeResponse: type: string enum: - stop - station TranslatableStr: type: object required: - de - en properties: de: type: string en: type: string TransportationResponse: type: object required: - id - name - lat - lon - distance_meters properties: distance_meters: type: number format: double exclusiveMaximum: 1000 exclusiveMinimum: 0 id: type: string description: The globally unique and somewhat stable id of the station from the transport agency example: de:09184:2073:0:1 lat: type: number format: double description: Latitude example: 48.26244490906312 lon: type: number format: double description: Longitude example: 48.26244490906312 name: type: string description: How the station was named by the operator example: Garching, Boltzmannstraße parent_id: type: string description: The globally unique and somewhat stable id of the station from the transport agency example: de:09184:2073 nullable: true parent_name: type: string description: How the station was named by the operator example: Boltzmannstraße nullable: true TravelModeResponse: type: string enum: - drive - pedestrian - bicycle - public_transit URLRefResponse: type: object description: A link with a localized link text and url required: - text properties: text: type: string url: type: string nullable: true ValhallaLegResponse: type: object required: - summary - maneuvers - shape properties: maneuvers: type: array items: $ref: '#/components/schemas/ManeuverResponse' shape: type: array items: $ref: '#/components/schemas/Coordinate' summary: $ref: '#/components/schemas/SummaryResponse' ValhallaRoutingResponse: type: object required: - legs - summary properties: legs: type: array items: $ref: '#/components/schemas/ValhallaLegResponse' description: 'A trip contains one (or more) legs. A leg is created when routing stops, which currently only happens at the ends (`from`, `to`).' maxItems: 1 minItems: 1 summary: $ref: '#/components/schemas/SummaryResponse' description: Trip summary VertexTypeResponse: type: string enum: - normal - bikeshare - transit tags: - name: locations description: API to access/search for location information - name: calendar description: APIs to access calendar-data - name: feedback description: APIs to give feedback - name: maps description: API to access for map-data externalDocs: url: https://github.com/TUM-Dev/navigatum description: Visit our GitHub Page for more in-depth documentation $schema: http://json-schema.org/draft-07/schema