Aalto Course API (SISU)

Course units and course-unit realisations drawn from SISU, the Finnish higher-education student information system Aalto runs. OpenAPI 3.0.1, version 0.0.18, titled "Sisu API (replaces /oodiapi)" — the designated replacement for the deprecated Oodi-sourced Course API. Served from course.api.aalto.fi with a USER_KEY query-string API key. The contract is Aalto's own gateway contract; SISU itself is a Funidata product Aalto operates as a tenant.

Operations 4

GET /courseunits Retrieve all course units
GET /courseunitrealisations Retrieve all course unit realizations (with start and end date)
GET /courseunitrealisations/{id} Retrieve one particular course unit realization using the SISU internal ID
GET /courseunitrealisations-enhanced Retrieve detailed course information - only for internal Aalto use

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/course-sisu"
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

aalto-course-sisu-api-openapi.yml Raw ↑
# Fetched 2026-08-30 from https://3scale.apps.ocp4.aalto.fi/api_docs/services/27.json
# method: searched  |  x-operator: institution  |  source: Aalto API Gateway public ActiveDocs index
openapi: 3.0.1
info:
  title: Sisu API (replaces /oodiapi)
  description: Handles SISU data - course units and realizations
  version: 0.0.18
servers:
- url: https://course.api.aalto.fi:443/api/sisu/v1
- url: https://course-test.api.aalto.fi:443/api/sisu/v1
paths:
  /courseunits:
    get:
      tags:
      - SISU Courses
      summary: Retrieve all course units
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: Course unit response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/courseunitsType'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error'
  /courseunitrealisations:
    get:
      tags:
      - SISU Courses
      summary: Retrieve all course unit realizations (with start and end date)
      security:
      - ApiKeyAuth: []
      parameters:
      - name: code
        in: query
        description: Wild card search for code
        schema:
          type: string
      - name: endTimeAfter
        in: query
        description: Return all course units which end after the specified time
        schema:
          type: string
      - name: endTimeBefore
        in: query
        description: Return all course units which end before the specified time
        schema:
          type: string
      - name: organizationId
        in: query
        description: Filter by organization id
        schema:
          type: string
      - name: search
        in: query
        description: Searches from course code, name, teacher and summary. Supports multiple keywords
        schema:
          type: string
      - name: startTimeAfter
        in: query
        description: Return all course units which start after the specified time
        schema:
          type: string
      - name: startTimeBefore
        in: query
        description: Return all course units which start before the specified time
        schema:
          type: string
      - name: unitType
        in: query
        description: Filter course units by type
        schema:
          type: string
      - name: limit
        in: query
        description: Limit the size of the result set
        schema:
          type: string
      - name: offset
        in: query
        schema:
          type: integer
          default: 0
      responses:
        '200':
          description: Course unit realisation response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/courseunitrealisationsType'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
  /courseunitrealisations/{id}:
    get:
      tags:
      - SISU Courses
      summary: Retrieve one particular course unit realization using the SISU internal ID
      security:
      - ApiKeyAuth: []
      parameters:
      - name: id
        in: path
        description: 'SISU Course unit realisation id. example aalto-CUR-1148019327-2 '
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Course unit realisation response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/courseunitrealisationType'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
  /courseunitrealisations-enhanced:
    get:
      tags:
      - SISU Courses
      summary: Retrieve detailed course information - only for internal Aalto use
      parameters:
      - name: id
        in: query
        schema:
          type: string
      - name: type
        in: query
        description: Filter with course unit types, comma separated
        schema:
          type: string
      - name: endTimeAfter
        in: query
        description: Return units which end after the specified date
        schema:
          type: string
          format: date
      - name: endTimeBefore
        in: query
        description: Return units which end before the specified date
        schema:
          type: string
          format: date
      - name: startTimeAfter
        in: query
        description: Return units which start after the specified date
        schema:
          type: string
          format: date
      - name: startTimeBefore
        in: query
        description: Return units which start before the specified date
        schema:
          type: string
          format: date
      responses:
        '200':
          description: Course unit realisation response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/courseunitrealisations-enhancedType'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
        '500':
          description: Internal error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/errorResponse'
      security:
      - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: query
      name: USER_KEY
  schemas:
    error:
      required:
      - message
      type: object
      properties:
        message:
          type: string
        inner:
          type: string
    errorResponse:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/errorType'
    errorType:
      type: object
      properties:
        code:
          type: number
        message:
          type: string
    costCentre:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/langType'
        share:
          type: integer
        code:
          type: string
        schoolName:
          $ref: '#/components/schemas/langType'
        schoolCode:
          type: string
        abbreviation:
          $ref: '#/components/schemas/langType'
    courseunitrealisations-enhancedType:
      type: array
      items:
        $ref: '#/components/schemas/courseunitrealisation-enhancedType'
    courseunitrealisation-enhancedType:
      type: object
      properties:
        id:
          type: string
        name:
          $ref: '#/components/schemas/langType'
        activityStartDate:
          type: string
          example: '2020-08-04T00:00:00.000Z'
        activityEndDate:
          type: string
          example: '2020-08-04T00:00:00.000Z'
        enrollmentCount:
          type: string
        courseCode:
          type: string
        teachingLanguage:
          type: array
          items:
            type: string
        costCentre:
          type: array
          items:
            $ref: '#/components/schemas/costCentre'
        responsibleTeachers:
          type: array
          items:
            $ref: '#/components/schemas/stringType'
        responsibleTeachersDetails:
          type: array
          items:
            type: object
            properties:
              employeeNumber:
                type: string
                example: ATTESTI42
              eppn:
                type: string
                example: testin5@aalto.fi
        participants:
          type: array
          items:
            type: string
    courseunitrealisationparticipantType:
      type: object
      properties:
        id:
          type: string
        documentState:
          type: string
        studentNumber:
          type: string
        firstNames:
          type: string
        callName:
          type: string
        lastName:
          type: string
        eduPersonPrincipalName:
          type: string
        primaryEmail:
          type: string
        secondaryEmail:
          type: string
    courseunitType:
      type: object
      properties:
        code:
          type: string
        groupId:
          type: string
        id:
          type: string
        curriculumPeriodIds:
          type: array
          items:
            type: string
        name:
          $ref: '#/components/schemas/langType'
        organisations:
          type: array
          items:
            type: object
            properties:
              organisationId:
                $ref: '#/components/schemas/stringType'
              educationalInstitutionUrn:
                $ref: '#/components/schemas/stringType'
              roleUrn:
                $ref: '#/components/schemas/stringType'
              share:
                type: integer
                example: 1
              validityPeriod:
                type: object
                properties: {}
        validityPeriod.startDate:
          type: string
          example: '2020-08-04T00:00:00.000Z'
        validityPeriod.endDate:
          type: string
          example: '2020-08-04T00:00:00.000Z'
        credits:
          type: object
          properties:
            min:
              type: integer
            max:
              type: integer
    langType:
      type: object
      properties:
        fi:
          type: string
        sv:
          type: string
        en:
          type: string
    stringType:
      type: string
    courseunitrealisationsType:
      type: array
      items:
        $ref: '#/components/schemas/courseunitrealisationType'
    courseunitsType:
      type: array
      items:
        $ref: '#/components/schemas/courseunitType'
    courseunitrealisationType:
      type: object
      properties:
        id:
          type: string
        code:
          type: string
        startDate:
          type: string
          example: '2020-08-04T00:00:00.000Z'
        endDate:
          type: string
          example: '2020-08-04T00:00:00.000Z'
        type:
          type: string
        name:
          $ref: '#/components/schemas/langType'
        summary:
          type: object
          properties:
            workload:
              $ref: '#/components/schemas/langType'
            prerequisites:
              $ref: '#/components/schemas/langType'
            learningOutcomes:
              $ref: '#/components/schemas/langType'
            literature:
              $ref: '#/components/schemas/langType'
            languagegueOfInstructions:
              $ref: '#/components/schemas/langType'
            registration:
              $ref: '#/components/schemas/langType'
            homepage:
              $ref: '#/components/schemas/langType'
            content:
              $ref: '#/components/schemas/langType'
            cerfLevel:
              $ref: '#/components/schemas/langType'
            level:
              $ref: '#/components/schemas/langType'
            teacherInCharge:
              $ref: '#/components/schemas/langType'
            assesmentMethods:
              $ref: '#/components/schemas/langType'
            courseStatus:
              $ref: '#/components/schemas/langType'
            substitutes:
              $ref: '#/components/schemas/langType'
            additionalInformation:
              $ref: '#/components/schemas/langType'
            gradingScale:
              $ref: '#/components/schemas/langType'
            teachingPeriod:
              $ref: '#/components/schemas/langType'
        organizationId:
          type: string
        credits:
          type: integer
        courseUnitId:
          type: string
        languageOfInstructionCodes:
          type: array
          items:
            $ref: '#/components/schemas/stringType'
        teachers:
          type: array
          items:
            $ref: '#/components/schemas/stringType'