Politecnico di Torino Courses API

Courses resources of the Polito Faculty API, split per tag from openapi/_original/. Operated by Politecnico di Torino on app.didattica.polito.it; the contract is authored by the university in TypeSpec and published at github.com/polito/api-spec. Bearer authentication against a PoliTO account is required — the base path returns 403 anonymously.

Operations 13

GET /courses/{courseId} Show course | Mostra corso #
GET /courses/{courseId}/assignments List assignments | Elenca elaborati #
POST /courses/{courseId}/assignments Upload assignment | Carica elaborato #
PATCH /courses/{courseId}/assignments/{assignmentId} Update assignment | Aggiorna elaborato #
GET /courses/{courseId}/files List files | Elenca file #
GET /courses/{courseId}/files/{fileId} Download file | Scarica file #
GET /courses/{courseId}/guide Show guide | Mostra guida #
GET /courses/{courseId}/nextLecture Get next lecture | Ottieni prossima lezione #
GET /courses/{courseId}/notices List notices | Elenca avvisi #
PATCH /courses/{courseId}/preferences Update course preferences | Aggiorna preferenze del corso #
GET /courses/{courseId}/videolectures List videolectures | Elenca videolezioni #
GET /courses/{courseId}/virtual-classrooms List virtual classrooms | Elenca virtual classroom #
GET /v2/courses List courses | Elenca corsi #

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/politecnico-di-torino-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

politecnico-di-torino-courses-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Polito Faculty API — Courses
  version: 0.0.1
  license:
    name: CC BY-NC 4.0
    url: https://creativecommons.org/licenses/by-nc/4.0/
servers:
- url: https://app.didattica.polito.it/api
  description: Production server
  variables: {}
- url: https://app.didattica.polito.it/mock/api
  description: Mock server (uses example data)
  variables: {}
security:
- BearerAuth: []
tags:
- name: Courses
paths:
  /courses/{courseId}:
    get:
      operationId: Courses_getCourse
      summary: Show course | Mostra corso
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Course'
                required:
                - data
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
  /courses/{courseId}/assignments:
    get:
      operationId: Courses_getCourseAssignments
      summary: List assignments | Elenca elaborati
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CourseAssignment'
                required:
                - data
              example:
                data:
                - id: 1003948
                  description: extrapoints2
                  mimeType: application/x-zip-compressed
                  filename: extrapoints2.zip
                  uploadedAt: '2022-01-21T14:38:00Z'
                  deletedAt: null
                  url: https://file.didattica.polito.it/down/ELABORATI_PRE/1003948/S290683/14576f69df588d55b631c3c3c30de3f5/6305eae6
                  sizeInKiloBytes: 195
                - id: 993784
                  description: extrapoints1
                  mimeType: application/x-zip-compressed
                  filename: extrapoints1.zip
                  uploadedAt: '2022-01-10T18:53:00Z'
                  deletedAt: null
                  url: https://file.didattica.polito.it/down/ELABORATI_PRE/993784/S290683/15c275f7f7682c6acb5acd07d24590a9/6305eae6
                  sizeInKiloBytes: 401
                - id: 982517
                  description: lab_09
                  mimeType: application/zip
                  filename: lab_09.zip
                  uploadedAt: '2021-12-16T22:48:00Z'
                  deletedAt: null
                  url: https://file.didattica.polito.it/down/ELABORATI_PRE/982517/S290683/29288344d27567de6ddf0fa718b980a5/6305eae6
                  sizeInKiloBytes: 126
                - id: 934034
                  description: lab_01
                  mimeType: application/x-zip-compressed
                  filename: lab_01.zip
                  uploadedAt: '2021-10-13T11:20:00Z'
                  deletedAt: null
                  url: https://file.didattica.polito.it/down/ELABORATI_PRE/934034/S290683/fd675d8a411d0747885b24e473a5d683/6305eae6
                  sizeInKiloBytes: 144
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
    post:
      operationId: Courses_uploadCourseAssignment
      summary: Upload assignment | Carica elaborato
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: 'There is no content to send for this request, but the headers may be useful. '
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CourseAssignmentUpload'
  /courses/{courseId}/assignments/{assignmentId}:
    patch:
      operationId: Courses_updateAssignment
      summary: Update assignment | Aggiorna elaborato
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      - name: assignmentId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: 'There is no content to send for this request, but the headers may be useful. '
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAssignmentRequest'
  /courses/{courseId}/files:
    get:
      operationId: Courses_getCourseFiles
      summary: List files | Elenca file
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CourseDirectoryContent'
                required:
                - data
              example:
                data:
                - id: '33248655'
                  name: videolectures
                  type: directory
                  files:
                  - id: '33248890'
                    name: HCI2021-L01 2021-09-28 13-06-26.m4v
                    sizeInKiloBytes: 123428
                    mimeType: video/x-m4v
                    createdAt: '2021-09-28T16:31:43Z'
                    type: file
                    checksum: deadbeefcafebabe0000000000000000
                  - id: '33251708'
                    name: HCI2021-L02 2021-09-30 08-34-32.mp4
                    sizeInKiloBytes: 248172
                    mimeType: video/mp4
                    createdAt: '2021-09-30T10:20:50Z'
                    type: file
                    checksum: deadbeefcafebabe0000000000000001
                  - id: '33256476'
                    name: HCI2021-L03 2021-10-05 13-06-47.mp4
                    sizeInKiloBytes: 243792
                    mimeType: video/mp4
                    createdAt: '2021-10-05T15:00:15Z'
                    type: file
                    checksum: deadbeefcafebabe0000000000000002
                  - id: '33257988'
                    name: HCI2021-L04 2021-10-07 08-35-46.mp4
                    sizeInKiloBytes: 244993
                    mimeType: video/mp4
                    createdAt: '2021-10-07T11:12:25Z'
                    type: file
                    checksum: deadbeefcafebabe0000000000000003
                  - id: '33262287'
                    name: HCI2021-L05 2021-10-12 13-05-46.mp4
                    sizeInKiloBytes: 298172
                    mimeType: video/mp4
                    createdAt: '2021-10-12T16:11:46Z'
                    type: file
                    checksum: deadbeefcafebabe0000000000000004
                  - id: '33265387'
                    name: HCI2021-L06 2021-10-14 08-35-12.mp4
                    sizeInKiloBytes: 285926
                    mimeType: video/mp4
                    createdAt: '2021-10-14T11:25:20Z'
                    type: file
                    checksum: deadbeefcafebabe0000000000000005
                  - id: '33269079'
                    name: HCI2021-L07 2021-10-19 13-10-40.mp4
                    sizeInKiloBytes: 234466
                    mimeType: video/mp4
                    createdAt: '2021-10-19T15:02:22Z'
                    type: file
                    checksum: deadbeefcafebabe0000000000000006
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
  /courses/{courseId}/files/{fileId}:
    get:
      operationId: Courses_getCourseFile
      summary: Download file | Scarica file
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      - name: fileId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema: {}
        '302':
          description: Redirection
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: The server cannot find the requested resource.
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
  /courses/{courseId}/guide:
    get:
      operationId: Courses_getCourseGuide
      summary: Show guide | Mostra guida
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/GuideSection'
                required:
                - data
              example:
                data:
                - title: Presentazione
                  content: Nowadays, computing devices are ubiquitously present and integrated in our daily life. Sensors and actuators are embedded in home appliances, lights, or cars. This course provides a strong foundation in human-centered design principles.
                - title: Risultati attesi
                  content: 'Knowledge: Concepts of Usability, User Experience, User centered design processes. Skills: Developing a working prototype, mastering novel interaction technologies, joint development in teams.'
                - title: Prerequisiti
                  content: Programming skills, knowledge on web technologies (HTML, JS, client-server architectures), attitude towards working in teams.
                - title: Programma
                  content: Introduction to Human-Computer Interaction, building interactive applications with human-centered design process, beyond WIMP paradigms (AI-powered systems, tangible interaction, voice, wearables).
                - title: Note
                  content: ''
                - title: Organizzazione dell'insegnamento
                  content: Project-based and problem-based learning with teams working towards a common goal. Project-related activities start since the beginning with deliverables before given deadlines.
                - title: Bibliografia
                  content: Course slides and related materials. Selected chapters from Human Computer Interaction texts by Dix et al., and Shneiderman et al.
                - title: Regole d'esame
                  content: Exam consists of written test (40% of score) and group project evaluation (60% of score). Both parts are mandatory and must be taken in the same academic year.
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
  /courses/{courseId}/nextLecture:
    get:
      operationId: Courses_getNextLecture
      summary: Get next lecture | Ottieni prossima lezione
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Lecture'
                required:
                - data
              example:
                data:
                  id: 12131312
                  startsAt: '2021-09-28T14:30:00Z'
                  endsAt: '2021-09-28T17:30:00Z'
                  place:
                    buildingId: TO_CIT22
                    floorId: XPTE
                    name: Aula 1P
                    roomId: '036'
                    siteId: TO_CIT
                  type: Lezione
                  description: null
                  courseId: 252258
                  courseName: Human Computer Interaction
                  teacherId: 1847
                  virtualClassrooms:
                  - id: 149336
                    title: CYB / lecture 28.09.2021 (TLS, slides 1-40)
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
  /courses/{courseId}/notices:
    get:
      operationId: Courses_getCourseNotices
      summary: List notices | Elenca avvisi
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CourseNotices'
                required:
                - data
              example:
                data:
                - id: 332559
                  publishedAt: '2021-09-22T14:00:00Z'
                  expiresAt: null
                  content: '<p>Dear students,</p><p>welcome to the 2021 edition of the Human Computer Interaction course (<strong>HCI</strong>, for short)!</p><p>Some useful information to get started...</p><p>The <strong>first class</strong> will be on Tuesday, September 28, in Room 7T, from 13:00 to 14:30.<br />Don&#39;t forget to <em>book</em> a spot in the room, starting from tomorrow, on the Portale della Didattica: the rooms given to this course are currently bigger than the number of enrolled students, so there should be space for everybody!</p><p>All teaching <strong>material</strong>, information, and course schedule will be posted on the page: <a href="http://bit.ly/polito-hci">http://bit.ly/polito-hci</a> (we will <u>not</u>&nbsp;use the Portale della Didattica).</p><p>All messages and communications with the teachers, and among students, will be on <strong>Slack</strong>. We will <u>completely</u>&nbsp;avoid email communications.<br />Please, join the <em>HCI Slack workspace</em> at the address:<br />&nbsp; <a href="https://join.slack.com/t/polito-hci-2021/signup">https://join.slack.com/t/polito-hci-2021/signup</a><br />Please note: to have access to the workspace, you must use your<em> @studenti.polito.it </em>email address. You are free to choose your nickname as you prefer.&nbsp;</p><p>Finally, all lectures &mdash; not labs &mdash; will be <strong>video-recorded</strong> and made available both on YouTube and on the Portale della Didattica. The YouTube playlist is:<br />&nbsp; <a href="https://www.youtube.com/playlist?list=PLs7DWGc_wmwT-1N2vbRkLWrM6LIker9A-">https://www.youtube.com/playlist?list=PLs7DWGc_wmwT-1N2vbRkLWrM6LIker9A-</a></p><p>See you on Tuesday!</p><p>Thanks,</p><p>Luigi and Fulvio</p>'
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
  /courses/{courseId}/preferences:
    patch:
      operationId: Courses_updateCoursePreferences
      summary: Update course preferences | Aggiorna preferenze del corso
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: 'There is no content to send for this request, but the headers may be useful. '
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CoursePreferencesRequest'
  /courses/{courseId}/videolectures:
    get:
      operationId: Courses_getCourseVideolectures
      summary: List videolectures | Elenca videolezioni
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/VideoLecture'
                required:
                - data
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
  /courses/{courseId}/virtual-classrooms:
    get:
      operationId: Courses_getCourseVirtualClassrooms
      summary: List virtual classrooms | Elenca virtual classroom
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: integer
      - name: live
        in: query
        required: false
        description: Filter virtual classrooms by their live status
        schema:
          type: boolean
        explode: false
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/VirtualClassroom'
                required:
                - data
              example:
                data:
                - id: 149336
                  title: CYB / lecture 28.09.2021 (TLS, slides 1-40)
                  teacherId: 1847
                  coverUrl: https://lucapezzolla.com/cover.jpg
                  videoUrl: https://video.polito.it/dl/BE7C779FC37D50996EE1FF32B6BC7FAE/6305E087/vc2021/252258/64cdcfc29ac1cd827d20ff1fa62c512eade6b3c0-1632832182985.mp4
                  createdAt: '2021-09-28T14:29:00Z'
                  duration: 02h 56m
                  type: recording
                - id: 150397
                  title: CYB / lecture 01.10.2021 (TLS, slides 41-55)
                  teacherId: 1847
                  coverUrl: https://lucapezzolla.com/cover.jpg
                  videoUrl: https://video.polito.it/dl/0BC53A27F4776D8A6809D28EB4CB3C9F/6305E087/vc2021/252258/e5e7a53da68cebd5cff1a585659092fcfeca651a-1633074845891.mp4
                  createdAt: '2021-10-01T09:54:00Z'
                  duration: 01h 31m
                  type: recording
                - id: 151650
                  title: CYB / lecture 5.10.2021 (TLS, slides 56-end, + SSH all slides)
                  teacherId: 1847
                  coverUrl: https://lucapezzolla.com/cover.jpg
                  videoUrl: https://video.polito.it/dl/56DA5556ECD96ED30EC6F8CBAB704285/6305E087/vc2021/252258/c30092cca256f522f64774e19538d43909ce558b-1633437688385.mp4
                  createdAt: '2021-10-05T14:41:00Z'
                  duration: 02h 43m
                  type: recording
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
  /v2/courses:
    get:
      operationId: CoursesV2_getCourses
      summary: List courses | Elenca corsi
      parameters: []
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CourseOverview'
                required:
                - data
              example:
                data:
                - id: null
                  name: System and device programming
                  shortcode: 01NYHOV
                  cfu: 10
                  teachingPeriod: 2-2
                  teacherId: 2893
                  teacherName: Stefano Quer
                  previousEditions: []
                  isOverBooking: false
                  enrollmentRole: student
                  year: '2025'
                  modules:
                  - id: 251008
                    name: Programming Module A
                    shortcode: 01NYHOV
                    teachingPeriod: 2-2
                    teacherId: 3001
                    teacherName: Mario Rossi
                    previousEditions:
                    - id: 251005
                      year: '2024'
                    isOverBooking: false
                    enrollmentRole: student
                    year: '2025'
                  - id: 251009
                    name: Programming Module B
                    shortcode: 01NYHOV
                    teachingPeriod: 2-2
                    teacherId: 3002
                    teacherName: Giovanni Verdi
                    previousEditions:
                    - id: 251006
                      year: '2024'
                    isOverBooking: false
                    enrollmentRole: student
                    year: '2025'
                - id: 252121
                  name: Web Applications II
                  shortcode: 01TXSOV
                  cfu: 6
                  teachingPeriod: 2-2
                  teacherId: 2235
                  teacherName: Giovanni Malnati
                  previousEditions: []
                  isOverBooking: false
                  enrollmentRole: student
                  year: '2025'
                  modules: null
                - id: 252126
                  name: Security verification and testing
                  shortcode: 01TYAOV
                  cfu: 6
                  teachingPeriod: 1-1
                  teacherId: 1943
                  teacherName: Riccardo Sisto
                  previousEditions: []
                  isOverBooking: false
                  enrollmentRole: student
                  year: '2025'
                  modules: null
                - id: 252138
                  name: Information systems security
                  shortcode: 01TYMOV
                  cfu: 6
                  teachingPeriod: 1-1
                  teacherId: 1847
                  teacherName: Antonio Lioy
                  previousEditions: []
                  isOverBooking: false
                  enrollmentRole: student
                  year: '2025'
                  modules: null
                - id: 252258
                  name: Cybersecurity
                  shortcode: 01UDROV
                  cfu: 6
                  teachingPeriod: 2-2
                  teacherId: 1847
                  teacherName: Antonio Lioy
                  previousEditions: []
                  isOverBooking: false
                  enrollmentRole: student
                  year: '2025'
                  modules: null
                - id: 252788
                  name: Architetture dei sistemi di elaborazione
                  shortcode: 02GOLOV
                  cfu: 10
                  teachingPeriod: 1-1
                  teacherId: 12684
                  teacherName: Edgar Ernesto Sanchez Sanchez
                  previousEditions: []
                  isOverBooking: false
                  enrollmentRole: student
                  year: '2025'
                  modules: null
                - id: 252842
                  name: Human Computer Interaction
                  shortcode: 02JSKOV
                  cfu: 6
                  teachingPeriod: 1-1
                  teacherId: 25734
                  teacherName: Luigi De Russis
                  previousEditions: []
                  isOverBooking: false
                  enrollmentRole: student
                  year: '2025'
                  modules: null
                - id: 253378
                  name: Cryptography
                  shortcode: 03LPYOV
                  cfu: 6
                  teachingPeriod: 2-2
                  teacherId: 13461
                  teacherName: Antonio Jose Di Scala
                  previousEditions: []
                  isOverBooking: false
                  enrollmentRole: student
                  year: '2025'
                  modules: null
                - id: null
                  name: Tesi
                  shortcode: 29EBHOV
                  cfu: 30
                  teachingPeriod: 1-1
                  teacherId: null
                  teacherName: null
                  previousEditions: []
                  isOverBooking: false
                  enrollmentRole: student
                  year: '2025'
                  modules: null
        '400':
          description: The server could not understand the request due to invalid syntax.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Courses
components:
  schemas:
    PlaceRef:
      type: object
      required:
      - buildingId
      - floorId
      - roomId
      - siteId
      - name
      properties:
        buildingId:
          type: string
        floorId:
          type: string
        roomId:
          type: string
        siteId:
          type: string
        name:
          type: string
    VirtualClassroomBase:
      type: object
      required:
      - id
      - title
      - createdAt
      - teacherId
      properties:
        id:
          type: integer
        title:
          type: string
        createdAt:
          type: string
          format: date-time
        teacherId:
          type: integer
    CourseAssignment:
      type: object
      required:
      - id
      - description
      - mimeType
      - filename
      - uploadedAt
      - deletedAt
      - url
      - sizeInKiloBytes
      properties:
        id:
          type: integer
          example: 947503
        description:
          type: string
          example: laboratorio 3
        mimeType:
          type: string
          example: application/x-zip-compressed
        filename:
          type: string
          example: lab_03.zip
        uploadedAt:
          type: string
          format: date-time
          example: '2022-09-02T14:00:00Z'
        deletedAt:
          type:
          - string
          - 'null'
          format: date-time
        url:
          type: string
          example: https://file.didattica.polito.it/down/ELABORATI_PRE/1003948/S290683/6791f0016c78599138828211522fa84d/62cebc94
        sizeInKiloBytes:
          type: integer
          example: 305
    CourseModuleEdition:
      type: object
      required:
      - year
      - id
      properties:
        year:
          type: string
          example: '2021'
        id:
          type: integer
          example: 244577
    CoursePreferencesRequest:
      type: object
      properties:
        notifications:
          type: object
          properties:
            notices:
              type: boolean
              example: true
            files:
              type: boolean
              example: true
            lectures:
              type: boolean
              example: true
    CourseNotices:
      type: object
      required:
      - id
      - publishedAt
      - expiresAt
      - content
      properties:
        id:
          type: integer
          example: 360724
        publishedAt:
          type: string
          format: date-time
          example: '2022-07-03T14:00:00Z'
        expiresAt:
          type:
          - string
          - 'null'
          format: date-time
        content:
          type: string
          example: <p>Conferma spostamento orario esame:</p><p><b>Ore 15</b></p>
    UpdateAssignmentRequest:
      type: object
      properties:
        delivery:
          type: boolean
        state:
          type: string
          enum:
          - submitted
          - uploaded
    CourseDirectoryContent:
      type: array
      items:
        $ref: '#/components/schemas/CourseDirectoryEntry

# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/politecnico-di-torino/refs/heads/main/openapi/politecnico-di-torino-courses-api-openapi.yml