University of Macau Courses API

This data set includes courses and their corresponding sections. For each section, two JSON Array of objects detail the schedule and instructor arrangements.

Operations 3

GET /service/academic/courses/all GET /all #
GET /service/academic/courses/{course}-{year}-{sem} GET /course-year-sem #
GET /service/academic/courses/{courseCode}-{year}-{sem}/{sectionCode} GET/courseCode-year-sem/sectionCode #

Documentation

Specifications

Schemas & Data

Other Resources

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/university-of-macau-courses-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

university-of-macau-courses-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: University of Macau Data and Open Data API Platform Courses…
  version: '1.0'
  description: 'The University of Macau (UM) Data and Open Data API Platform, operated by the university''s Information and Communication Technology Office (ICTO), exposes UM''s own institutional data as JSON APIs: organizational units and public holidays, the course catalog and course offerings, campus facilities (car park availability, computer room PC status and reservations, shuttle bus arrival times, sports facilities and bookings, door access control records, outdoor WiFi access logs), university news and…'
  termsOfService: https://data.um.edu.mo/terms-and-conditions-of-use
  contact:
    name: Information and Communication Technology Office (ICTO), University of Macau
    email: icto.ims@um.edu.mo
    url: https://data.um.edu.mo/contact-us
  x-operator: institution
  x-operator-evidence: 'All 16 APIs are served from https://api.data.um.edu.mo, a host under the University of Macau''s own registrable domain um.edu.mo, and every dataset is UM''s own campus data. The delivery platform is Azure API Management (WWW-Authenticate: AzureApiManagementKey), but Microsoft operates no part of the data or the API design — the copyright line on every portal page reads "Information and Communication Technology Office (ICTO), University of Macau".'
servers:
- url: https://api.data.um.edu.mo
  description: Production gateway (Azure API Management, region East Asia)
security:
- apiKeyHeader: []
- apiKeyQuery: []
tags:
- name: Courses
  description: This data set includes courses and their corresponding sections. For each section, two JSON Array of objects detail the schedule and instructor arrangements.
paths:
  /service/academic/courses/all:
    get:
      tags:
      - Courses
      operationId: courses_get_all
      summary: GET /all
      parameters:
      - name: all
        in: query
        required: false
        schema:
          type: string
      - name: course_code
        in: query
        required: false
        schema:
          type: string
        description: ID representing this course
        example: COIS713
      - name: year
        in: query
        required: false
        schema:
          type: string
        description: The academic year in which the course was offered, e.g. year 2017 represents academic year 2017/2018
        example: '2017'
      - name: sem
        in: query
        required: false
        schema:
          type: string
        description: 'Semester ID, values range from 1 to 5, which represent:

          1: First semester

          2: Second semester

          3: Summer term

          4: Fourth term, obsolete since 2008

          5: Fifth term, obsolete since 1985'
        example: '1'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/pagesize'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/sort_by'
      responses:
        '200':
          description: The request was successful.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedCollection'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '403':
          $ref: '#/components/responses/QuotaExceeded'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /service/academic/courses/{course}-{year}-{sem}:
    get:
      tags:
      - Courses
      operationId: courses_get_course_year_sem
      summary: GET /course-year-sem
      description: GET /{course}-{year}-{sem}
      parameters:
      - name: course
        in: path
        required: true
        description: ID representing this course
        schema:
          type: string
        example: EDPC602
      - name: year
        in: path
        required: true
        description: The academic year in which the course was offered, e.g. year 2017 represents academic year 2017/2018
        schema:
          type: string
        example: '2017'
      - name: sem
        in: path
        required: true
        description: 'Semester ID, values range from 1 to 5, which represent:

          1: First semester

          2: Second semester

          3: Summer term

          4: Fourth term, obsolete since 2008

          5: Fifth term, obsolete since 1985'
        schema:
          type: string
        example: '1'
      responses:
        '200':
          description: The request was successful.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedCollection'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '403':
          $ref: '#/components/responses/QuotaExceeded'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /service/academic/courses/{courseCode}-{year}-{sem}/{sectionCode}:
    get:
      tags:
      - Courses
      operationId: courses_get_coursecode_year_sem_sectioncode
      summary: GET/courseCode-year-sem/sectionCode
      description: GET/{courseCode}-{year}-{sem}/{sectionCode}
      parameters:
      - name: courseCode
        in: path
        required: true
        description: ID representing this course
        schema:
          type: string
        example: EDPC602
      - name: year
        in: path
        required: true
        description: The academic year in which the course was offered, e.g. year 2017 represents academic year 2017/2018
        schema:
          type: string
        example: '2017'
      - name: sem
        in: path
        required: true
        description: 'Semester ID, values range from 1 to 5, which represent:

          1: First semester

          2: Second semester

          3: Summer term

          4: Fourth term, obsolete since 2008

          5: Fifth term, obsolete since 1985'
        schema:
          type: string
        example: '1'
      - name: sectionCode
        in: path
        required: true
        description: The section ID
        schema:
          type: string
        example: '001'
      responses:
        '200':
          description: The request was successful.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PagedCollection'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '403':
          $ref: '#/components/responses/QuotaExceeded'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  parameters:
    page:
      name: page
      in: query
      required: false
      description: The page to be retrieved, starting from 1. Page 1 is returned if not specified.
      schema:
        type: integer
        minimum: 1
        default: 1
      example: 1
    count:
      name: count
      in: query
      required: false
      description: Present-as-flag parameter. When supplied, the response carries _size (total records) and _total_pages (total pages) for the result set.
      schema:
        type: string
      allowEmptyValue: true
    pagesize:
      name: pagesize
      in: query
      required: false
      description: The maximum number of objects returned per page. Value ranges from 1 to 100; default is 100.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 100
      example: 10
    sort_by:
      name: sort_by
      in: query
      required: false
      description: Sort the result by a specific field. Ascending by default; prefix the field name with "-" for descending. Sorting on a non-indexed field aborts at 32 MB of memory — see the data dictionary "Indexed" column.
      schema:
        type: string
      example: -accessDate
  responses:
    BadRequest:
      description: The request was invalid or cannot be otherwise served.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Rate limit exceeded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    QuotaExceeded:
      description: Out of call volume quota for the subscription within the given time period.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    InternalServerError:
      description: The API service may be undergoing maintenance.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    AccessDenied:
      description: Missing or incorrect authentication credentials.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    PagedCollection:
      type: object
      description: Standard collection envelope returned by every /all operation.
      properties:
        _embedded:
          type: array
          description: The page of records. Record shape varies per data set; see the platform data dictionary.
          items:
            type: object
            additionalProperties: true
        _returned:
          type: integer
          description: Number of records in this response.
        _size:
          type: integer
          description: Total number of records in the result set. Present only when the count parameter is supplied.
        _total_pages:
          type: integer
          description: Total number of pages, equal to ceil(_size / pagesize). Present only when the count parameter is supplied.
      required:
      - _embedded
      - _returned
    Error:
      type: object
      description: Error envelope returned by the gateway for every non-2xx response.
      properties:
        statusCode:
          type: integer
        message:
          type: string
      required:
      - statusCode
      - message
      example:
        statusCode: 401
        message: Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription.
  securitySchemes:
    apiKeyHeader:
      type: apiKey
      name: Authorization
      in: header
      description: Subscription key from the UM Members product subscription, sent as the raw value of the Authorization header.
    apiKeyQuery:
      type: apiKey
      name: subscription-key
      in: query
      description: Same subscription key, supplied as a query parameter.