Student Portal 4EU+ API

The REST API behind the Student Portal 4EU+, the shared student services portal of the 4EU+ European University Alliance, built and operated by the University of Warsaw. It publishes its own springdoc-generated OpenAPI 3.1 (74 paths, 44 schemas) at /v3/api-docs and serves Swagger UI at the API root. Resources cover the alliance course catalogue and syllabi, mobility options, housing, tutorials, person roles, profiles and student documents. Read endpoints such as GET /api/v1/Tutorial answer anonymously; Admin and User surfaces need a bearer token from /access/login, and the portal authenticates users against the University of Warsaw SAML IdP. Operator evidence: servers[0] is https://api.sp4eu.uw.edu.pl, the build info at /system/build reports group pl.edu.uw.dsk.sp4eu, and the SP's eduGAIN registration names University of Warsaw as the entity organisation.

Operations 91

PUT /api/v1/MobilityOptionHome/ApplicationProcedure/Content Ustawianie procedury aplikacji dla uniwersytetu #
PUT /api/v1/Admin/Tutorial/{tutorialId} Aktualizacja tutorialu #
DELETE /api/v1/Admin/Tutorial/{tutorialId} Usunięcie tutorialu z relacjami #
PUT /api/v1/Admin/RegistrationInfo/{courseRegistrationInfoId} Aktualizacja informacji o rejestracji #
GET /api/v1/Admin/MobilityOption/{id} Czytanie informacji o opcji mobilności z podanym id #
PUT /api/v1/Admin/MobilityOption/{id} Aktualizacja opcji mobilności #
DELETE /api/v1/Admin/MobilityOption/{id} Usuwanie opcji mobilności #
GET /api/v1/Admin/MobilityOption/{id}/HostApplicationProcedure Czytanie procedury aplikacji dla opcji mobilności po id #
PUT /api/v1/Admin/MobilityOption/{id}/HostApplicationProcedure Ustawianie procedury aplikacji #
DELETE /api/v1/Admin/MobilityOption/{id}/HostApplicationProcedure Usuwanie procedury aplikacji dla opcji mobilności po id #
GET /api/v1/Admin/CourseCertificate/{documentId} Wyświetlanie danych konkretnego certyfikatu. #
PUT /api/v1/Admin/CourseCertificate/{documentId} Aktualizacja danych certyfikatu. #
DELETE /api/v1/Admin/CourseCertificate/{documentId} Usunięcie certyfikatu (wraz z powiązanymi plikami). #
GET /api/v1/Admin/CourseCertificate/{documentId}/File/{fileId} Wyświetlanie danych pliku. #
PUT /api/v1/Admin/CourseCertificate/{documentId}/File/{fileId} Aktualizacja danych pliku. #
DELETE /api/v1/Admin/CourseCertificate/{documentId}/File/{fileId} Usunięcie pliku. #
PUT /api/v1/Admin/Course/{courseId} Aktualizacja kursu #
PUT /api/v1/Admin/Course/{courseId}/Syllabus/{courseSyllabusId} Aktualizowanie sylabusa kursu #
PUT /api/v1/Admin/Course/{courseId}/Profile Aktualizacja profilu dla kursu #
GET /api/v1/Profile Listowanie danych o profilach niezależnie od pola is_publicly_visible #
POST /api/v1/Profile Dodawanie profilu #
GET /api/v1/PersonRole #
POST /api/v1/PersonRole #
DELETE /api/v1/PersonRole #
GET /api/v1/HousingOption Listowanie danych o opcjach zakwaterowania (z paginacją - odata). #
POST /api/v1/HousingOption Dodanie nowej opcji zakwaterowania. #
POST /api/v1/HousingOption/{id}/File/Upload Dodanie pliku dla opcji zakwaterowania o podanym id. #
GET /api/v1/Admin/Tutorial Listowanie danych o tutorialach #
POST /api/v1/Admin/Tutorial Dodawanie tutorialu #
GET /api/v1/Admin/RegistrationInfo Pobranie informacji o rejestracjach. #
POST /api/v1/Admin/RegistrationInfo Dodawanie informacji o rejestracji #
POST /api/v1/Admin/MobilityOption Utworzenie opcji mobilności wraz z artykułem i powiązaniem #
GET /api/v1/Admin/Course Listowanie danych o kursach. #
POST /api/v1/Admin/Course Dodawanie kursu #
GET /api/v1/Admin/CourseCertificate Wyświetlanie listy danych wszystkich certyfikatów. #
POST /api/v1/Admin/CourseCertificate Dodanie certyfikatu (bez załączonego pliku). #
POST /api/v1/Admin/CourseCertificate/{documentId}/File Dodanie pliku. #
POST /api/v1/Admin/Course/{courseId}/Syllabus Dodawanie sylabusa kursu #
POST /api/v1/Admin/Course/ReadFromFile czytanie kursów z pliku xls i xlsx #
POST /api/v1/Admin/Course/Import Importowanie kursu #
POST /api/v1/Admin/Course/Export/SubjectIds Eksport wybranych kursów do pliku xlsx na podstawie subjectIds. #
POST /api/v1/Admin/Course/Export/CourseIds Eksport wybranych kursów do pliku xlsx na podstawie courseIds. #
GET /system/git #
GET /system/build #
GET /saml2/service-provider-metadata #
GET /saml2/idp available idps #
GET /principal Principal bez mapowania atrybutów. Zwraca dokładnie te atrybuty, które utrzymujemy z IDP (Identity Provider). #
GET /principal/edugain Principal z zamapowanymi wybranymi atrybutami w kontekście edugaina. #
GET /principal/authenticated authenticated #
GET /api/v1/User/Document #
GET /api/v1/User/Document/{documentId} #
GET /api/v1/User/Document/{documentId}/Download Pobranie powiązanych plików jako zip #
GET /api/v1/Tutorial Listowanie danych o tutorialach (z paginacją - odata). #
GET /api/v1/Tutorial/{id} Pobranie danych o tutorialu o podanym id. #
GET /api/v1/Profile/{id} Czytanie profilu z podanym id #
GET /api/v1/Profile/All Listowanie danych o profilach #
GET /api/v1/PersonRole/{id} #
GET /api/v1/PersonRole/SearchPerson #
GET /api/v1/PersonRole/SearchPerson/{personId} Czytanie informacji o osobie #
GET /api/v1/MobilityOption Listowanie danych o opcjach mobilności (z paginacją - odata). #
GET /api/v1/MobilityOptionHome/ApplicationProcedure Pobranie procedur aplikacji dla uniwersytetu. #
GET /api/v1/MobilityOption/{id} Pobranie danych o opcji mobilności o podanym id. #
GET /api/v1/MobilityOption/{id}/HostApplication Pobranie procedur aplikacji dla opcji mobilności o podanym id. #
GET /api/v1/HousingOption/{id} Pobranie danych o opcji zakwaterowania o podanym id. #
GET /api/v1/HousingOption/{id}/File Listowanie plików dla opcji zakwaterowania o podanym id. #
GET /api/v1/HousingOption/{id}/File/{fileId}/Download Pobranie pliku dla opcji zakwaterowania o podanym id. #
GET /api/v1/HousingOption/Principal Listowanie danych o opcjach zakwaterowania osoby (z paginacją - odata). #
GET /api/v1/Course Listowanie danych o kursach (z paginacją - odata). #
GET /api/v1/Course/{id} Pobranie danych o kursie o podanym id. #
GET /api/v1/Course/{id}/Syllabus Pobranie danych o rejestracji kursu o podanym id. #
GET /api/v1/Course/{id}/RegistrationInfo Pobranie informacji o rejestracji kursu o podanym id. #
GET /api/v1/Course/{id}/Profile Pobranie profili instruktorów kursu o podanym id. #
GET /api/v1/Admin/Tutorial/{id} Pobranie danych o tutorialu o podanym id. #
GET /api/v1/Admin/RegistrationInfo/{id} Pobranie informacji o rejestracji kursu o podanym id. #
GET /api/v1/Admin/Person/SearchPerson #
GET /api/v1/Admin/Person/SearchPerson/{personId} Czytanie informacji o osobie #
GET /api/v1/Admin/Person/All Czytanie informacji o wszystkich osobach #
GET /api/v1/Admin/MobilityOption/All Listowanie wszystkich opcji mobilności #
GET /api/v1/Admin/CourseCertificate/{personId}/Person Wyświetlanie listy danych certyfikatów dla danej osoby. #
GET /api/v1/Admin/CourseCertificate/{documentId}/Download Pobranie wszystkich plików dla danego certyfikatu. #
GET /api/v1/Admin/CourseCertificate/{documentId}/Download/{fileId} Pobranie konkretnego pliku. #
GET /api/v1/Admin/CourseCertificate/{courseId}/Course Wyświetlanie listy danych certyfikatów dla danego kursu. #
GET /api/v1/Admin/CourseCertificate/SearchPerson #
GET /api/v1/Admin/CourseCertificate/SearchPerson/{personId} Czytanie informacji o osobie #
GET /api/v1/Admin/Course/{id} Pobranie danych o kursie o podanym id. #
GET /api/v1/Admin/Course/{id}/Syllabus Pobranie danych o rejestracji kursu o podanym id. #
GET /api/v1/Admin/Course/{id}/RegistrationInfo Pobranie informacji o rejestracji kursu o podanym id. #
GET /api/v1/Admin/Course/{id}/Profile Pobranie profili instruktorów kursu o podanym id. #
GET /api/v1/Admin/Course/Import/FileTemplate pobieranie szablonu pliku xlsx eksportu kursów do pliku #
GET /api/v1/Admin/Course/Export Eksport kursów do pliku xlsx. Jeżeli 'year' nie zostanie podany - to zwracane są kursy, w których rok akademicki nie jest uzupełniony. #
DELETE /api/v1/Admin/Course/{courseId}/Remove Usunięcie kursu #

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/sp4eu-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-warsaw-sp4eu-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Student Portal 4EU+ API (University of Warsaw)
  version: v0
  description: Public REST API behind the Student Portal 4EU+, the shared student services portal of the 4EU+ European
    University Alliance, operated by the University of Warsaw. The portal exposes course catalogue, syllabus, mobility,
    housing, tutorial, profile and document resources across the alliance partners. This document is the service's
    OWN springdoc-generated OpenAPI, fetched verbatim from https://api.sp4eu.uw.edu.pl/v3/api-docs on 2026-09-01;
    only the info block, tag declarations and this provenance note were added by API Evangelist. Read endpoints
    such as GET /api/v1/Tutorial answer anonymously; the Admin and User surfaces require a bearer token obtained
    via /access/login, and the portal itself authenticates through the University of Warsaw SAML identity provider
    (https://login.uw.edu.pl/idp) registered in eduGAIN via PIONIER.Id.
  contact:
    name: University of Warsaw — Student Portal 4EU+
    url: https://sp4eu.uw.edu.pl/
  x-build:
    artifact: pl.edu.uw.dsk.sp4eu
    version: 0.0.1
    observed: '2026-09-01'
externalDocs:
  description: Student Portal 4EU+ (Swagger UI)
  url: https://api.sp4eu.uw.edu.pl/
x-provenance:
  generated: '2026-09-01'
  method: searched
  source: https://api.sp4eu.uw.edu.pl/v3/api-docs
  x-operator: institution
  evidence: servers[0] https://api.sp4eu.uw.edu.pl (University of Warsaw registrable domain uw.edu.pl); build artifact
    group pl.edu.uw.dsk.sp4eu; eduGAIN entity https://api.sp4eu.uw.edu.pl/saml2/service-provider-metadata registered
    by https://aai.pionier.net.pl with displayName "University of Warsaw".
servers:
- url: https://api.sp4eu.uw.edu.pl
tags:
- name: MobilityOptionHome
  description: MobilityOptionHome resources of the Student Portal 4EU+ API
- name: Admin
  description: Admin resources of the Student Portal 4EU+ API
- name: Profile
  description: Profile resources of the Student Portal 4EU+ API
- name: PersonRole
  description: PersonRole resources of the Student Portal 4EU+ API
- name: HousingOption
  description: HousingOption resources of the Student Portal 4EU+ API
- name: System
  description: System resources of the Student Portal 4EU+ API
- name: Saml2
  description: Saml2 resources of the Student Portal 4EU+ API
- name: Principal
  description: Principal resources of the Student Portal 4EU+ API
- name: User
  description: User resources of the Student Portal 4EU+ API
- name: Tutorial
  description: Tutorial resources of the Student Portal 4EU+ API
- name: MobilityOption
  description: MobilityOption resources of the Student Portal 4EU+ API
- name: Course
  description: Course resources of the Student Portal 4EU+ API
paths:
  /api/v1/MobilityOptionHome/ApplicationProcedure/Content:
    put:
      tags:
      - MobilityOptionHome
      summary: Ustawianie procedury aplikacji dla uniwersytetu
      operationId: setContentEnHost
      parameters:
      - name: university
        in: query
        required: true
        schema:
          type: string
          enum:
          - CUNI
          - UAH
          - SU
          - KU
          - UNIMI
          - UW
          - UNIGE
          - PARIS_2
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ArticleRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ArticlePreviewResponse'
      security:
      - Authorization: []
  /api/v1/Admin/Tutorial/{tutorialId}:
    put:
      tags:
      - Admin
      summary: Aktualizacja tutorialu
      operationId: updateTutorial
      parameters:
      - name: tutorialId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TutorialRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Sp4euTutorialResponse'
      security:
      - Authorization: []
    delete:
      tags:
      - Admin
      summary: Usunięcie tutorialu z relacjami
      operationId: removeTutorial
      parameters:
      - name: tutorialId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
  /api/v1/Admin/RegistrationInfo/{courseRegistrationInfoId}:
    put:
      tags:
      - Admin
      summary: Aktualizacja informacji o rejestracji
      operationId: updateCourseRegistrationInfo
      parameters:
      - name: courseRegistrationInfoId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseRegistrationInfoRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CourseRegistrationInfoResponse'
      security:
      - Authorization: []
  /api/v1/Admin/MobilityOption/{id}:
    get:
      tags:
      - Admin
      summary: Czytanie informacji o opcji mobilności  z podanym id
      operationId: getMobilityOption4euById
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/MobilityOptionResponse'
      security:
      - Authorization: []
    put:
      tags:
      - Admin
      summary: Aktualizacja opcji mobilności
      operationId: updateMobilityOptions
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MobilityOptionRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/MobilityOptionResponse'
      security:
      - Authorization: []
    delete:
      tags:
      - Admin
      summary: Usuwanie opcji mobilności
      operationId: removeMobilityOption
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
  /api/v1/Admin/MobilityOption/{id}/HostApplicationProcedure:
    get:
      tags:
      - Admin
      summary: Czytanie procedury aplikacji dla opcji mobilności po id
      operationId: getHostApplicationProceduresForOption
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ArticlePreviewResponse'
      security:
      - Authorization: []
    put:
      tags:
      - Admin
      summary: Ustawianie procedury aplikacji
      operationId: setContentEnHost_1
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ArticleRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ArticlePreviewResponse'
      security:
      - Authorization: []
    delete:
      tags:
      - Admin
      summary: Usuwanie procedury aplikacji dla opcji mobilności po id
      operationId: removeApplicationProcedure
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
  /api/v1/Admin/CourseCertificate/{documentId}:
    get:
      tags:
      - Admin
      summary: Wyświetlanie danych konkretnego certyfikatu.
      operationId: getCertificateById
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/DocumentPersonResponse'
      security:
      - Authorization: []
    put:
      tags:
      - Admin
      summary: Aktualizacja danych certyfikatu.
      operationId: updateCertificate
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseCertificateRequest'
        required: true
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
    delete:
      tags:
      - Admin
      summary: Usunięcie certyfikatu (wraz z powiązanymi plikami).
      operationId: deleteCertificate
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
  /api/v1/Admin/CourseCertificate/{documentId}/File/{fileId}:
    get:
      tags:
      - Admin
      summary: Wyświetlanie danych pliku.
      operationId: getFileById
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      - name: fileId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/AttachedFileResponse'
      security:
      - Authorization: []
    put:
      tags:
      - Admin
      summary: Aktualizacja danych pliku.
      operationId: updateFile
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      - name: fileId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AttachedFileRequest'
        required: true
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
    delete:
      tags:
      - Admin
      summary: Usunięcie pliku.
      operationId: deleteFile
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      - name: fileId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
  /api/v1/Admin/Course/{courseId}:
    put:
      tags:
      - Admin
      summary: Aktualizacja kursu
      operationId: updateCourse
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CourseSp4euResponse'
      security:
      - Authorization: []
  /api/v1/Admin/Course/{courseId}/Syllabus/{courseSyllabusId}:
    put:
      tags:
      - Admin
      summary: Aktualizowanie sylabusa kursu
      operationId: updateCourseSyllabus
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: string
      - name: courseSyllabusId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseSyllabusRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CourseSyllabusResponse'
      security:
      - Authorization: []
  /api/v1/Admin/Course/{courseId}/Profile:
    put:
      tags:
      - Admin
      summary: Aktualizacja profilu dla kursu
      operationId: updateCourseProfile
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseProfileSp4euRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CourseProfileResponse'
      security:
      - Authorization: []
  /api/v1/Profile:
    get:
      tags:
      - Profile
      summary: Listowanie danych o profilach niezależnie od pola is_publicly_visible
      operationId: queryForProfile
      parameters:
      - name: $skip
        in: query
        required: false
        schema:
          type: integer
          format: int64
          default: 0
      - name: $top
        in: query
        required: false
        schema:
          type: integer
          format: int64
          default: 10
          maximum: 1000
      - name: $inlinecount
        in: query
        required: false
        schema:
          type: string
      - name: $orderby
        in: query
        required: false
        schema:
          type: string
          default: firstName,middleNames,lastName
      - name: $filter
        in: query
        required: false
        schema:
          type: string
          default: ()
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OdataResponseQueryProfileItemResponse'
      security:
      - Authorization: []
    post:
      tags:
      - Profile
      summary: Dodawanie profilu
      operationId: addProfile
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProfileRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ProfileResponse'
      security:
      - Authorization: []
  /api/v1/PersonRole:
    get:
      tags:
      - PersonRole
      operationId: findAll
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PersonRoleResponse'
      security:
      - Authorization: []
    post:
      tags:
      - PersonRole
      operationId: upsertRole
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonRoleRequest'
        required: true
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
    delete:
      tags:
      - PersonRole
      operationId: deleteRole
      parameters:
      - name: id
        in: query
        required: true
        schema:
          type: integer
          format: int64
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
  /api/v1/HousingOption:
    get:
      tags:
      - HousingOption
      summary: Listowanie danych o opcjach zakwaterowania (z paginacją - odata).
      operationId: queryHousingOptions
      parameters:
      - name: $skip
        in: query
        required: false
        schema:
          type: integer
          format: int64
          default: 0
      - name: $top
        in: query
        required: false
        schema:
          type: integer
          format: int64
          default: 10
          maximum: 1000
      - name: $inlinecount
        in: query
        required: false
        schema:
          type: string
          default: allpages
      - name: $orderby
        in: query
        required: false
        schema:
          type: string
      - name: $filter
        in: query
        required: false
        schema:
          type: string
          default: ()
      - name: showOnlyPublished
        in: query
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OdataResponseHousingOptionsResponse'
      security:
      - Authorization: []
    post:
      tags:
      - HousingOption
      summary: Dodanie nowej opcji zakwaterowania.
      operationId: addHousingOption
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HousingOptionsRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/HousingOptionsResponse'
      security:
      - Authorization: []
  /api/v1/HousingOption/{id}/File/Upload:
    post:
      tags:
      - HousingOption
      summary: Dodanie pliku dla opcji zakwaterowania o podanym id.
      operationId: uploadHousingOptionFile
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
              required:
              - file
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
  /api/v1/Admin/Tutorial:
    get:
      tags:
      - Admin
      summary: Listowanie danych o tutorialach
      operationId: queryTutorialsForAdmin
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/QueryTutorialItemSp4euResponse'
      security:
      - Authorization: []
    post:
      tags:
      - Admin
      summary: Dodawanie tutorialu
      operationId: addTutorial
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TutorialRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Sp4euTutorialResponse'
      security:
      - Authorization: []
  /api/v1/Admin/RegistrationInfo:
    get:
      tags:
      - Admin
      summary: Pobranie informacji o rejestracjach.
      operationId: getAll
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CourseRegistrationInfoResponse'
      security:
      - Authorization: []
    post:
      tags:
      - Admin
      summary: Dodawanie informacji o rejestracji
      operationId: addCourseRegistrationInfo
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseRegistrationInfoRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CourseRegistrationInfoResponse'
      security:
      - Authorization: []
  /api/v1/Admin/MobilityOption:
    post:
      tags:
      - Admin
      summary: Utworzenie opcji mobilności wraz z artykułem i powiązaniem
      operationId: createMobilityOptionAndSetApplicationProcedure
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MobilityOptionAndArticleDto'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/MobilityOptionResponse'
      security:
      - Authorization: []
  /api/v1/Admin/Course:
    get:
      tags:
      - Admin
      summary: Listowanie danych o kursach.
      operationId: getAllCourses
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CourseSp4euResponse'
      security:
      - Authorization: []
    post:
      tags:
      - Admin
      summary: Dodawanie kursu
      operationId: addCourse
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CourseSp4euResponse'
      security:
      - Authorization: []
  /api/v1/Admin/CourseCertificate:
    get:
      tags:
      - Admin
      summary: Wyświetlanie listy danych wszystkich certyfikatów.
      operationId: findAllCertificates
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DocumentPersonResponse'
      security:
      - Authorization: []
    post:
      tags:
      - Admin
      summary: Dodanie certyfikatu (bez załączonego pliku).
      operationId: addCertificate
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseCertificateRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/DocumentPersonResponse'
      security:
      - Authorization: []
  /api/v1/Admin/CourseCertificate/{documentId}/File:
    post:
      tags:
      - Admin
      summary: Dodanie pliku.
      operationId: addFile
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                attachedFileRequest:
                  $ref: '#/components/schemas/AttachedFileRequest'
                file:
                  type: string
                  format: binary
              required:
              - attachedFileRequest
              - file
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
  /api/v1/Admin/Course/{courseId}/Syllabus:
    post:
      tags:
      - Admin
      summary: Dodawanie sylabusa kursu
      operationId: addCourseSyllabus
      parameters:
      - name: courseId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseSyllabusRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CourseSyllabusResponse'
      security:
      - Authorization: []
  /api/v1/Admin/Course/ReadFromFile:
    post:
      tags:
      - Admin
      summary: czytanie kursów z pliku xls i xlsx
      operationId: readFromFile
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                multipartFile:
                  type: string
                  format: binary
              required:
              - multipartFile
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CourseSp4euImportRequest'
      security:
      - Authorization: []
  /api/v1/Admin/Course/Import:
    post:
      tags:
      - Admin
      summary: Importowanie kursu
      operationId: importCourse
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CourseSp4euImportRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/CourseSp4euImportResponse'
      security:
      - Authorization: []
  /api/v1/Admin/Course/Export/SubjectIds:
    post:
      tags:
      - Admin
      summary: Eksport wybranych kursów do pliku xlsx na podstawie subjectIds.
      operationId: exportCoursesBySubjectIds
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
              uniqueItems: true
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: string
                format: binary
          x-is-file: 'true'
      security:
      - Authorization: []
  /api/v1/Admin/Course/Export/CourseIds:
    post:
      tags:
      - Admin
      summary: Eksport wybranych kursów do pliku xlsx na podstawie courseIds.
      operationId: exportCoursesByIds
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: string
              uniqueItems: true
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: string
                format: binary
          x-is-file: 'true'
      security:
      - Authorization: []
  /system/git:
    get:
      tags:
      - System
      operationId: gitProperties
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/GitProperties'
  /system/build:
    get:
      tags:
      - System
      operationId: buildProperties
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/BuildProperties'
  /saml2/service-provider-metadata:
    get:
      tags:
      - Saml2
      operationId: serviceProviderMetadata
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: string
                format: binary
  /saml2/idp:
    get:
      tags:
      - Saml2
      summary: available idps
      operationId: availableIdentityProviders
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  type: string
  /principal:
    get:
      tags:
      - Principal
      summary: Principal bez mapowania atrybutów. Zwraca dokładnie te atrybuty, które utrzymujemy z IDP (Identity
        Provider).
      operationId: principal
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/DefaultSaml2AuthenticatedPrincipal'
      security:
      - Authorization: []
  /principal/edugain:
    get:
      tags:
      - Principal
      summary: Principal z zamapowanymi wybranymi atrybutami w kontekście edugaina.
      description: 'Patrz: <a href=''https://www.switch.ch/aai/support/documents/attributes''>https://www.switch.ch/aai/support/documents/attributes</a>'
      operationId: edugainPrincipal
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/EdugainPrincipal'
      security:
      - Authorization: []
  /principal/authenticated:
    get:
      tags:
      - Principal
      summary: authenticated
      operationId: authenticated
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: boolean
      security:
      - Authorization: []
  /api/v1/User/Document:
    get:
      tags:
      - User
      operationId: findAllDocuments
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DocumentResponse'
      security:
      - Authorization: []
  /api/v1/User/Document/{documentId}:
    get:
      tags:
      - User
      operationId: findDocument
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/DocumentResponse'
      security:
      - Authorization: []
  /api/v1/User/Document/{documentId}/Download:
    get:
      tags:
      - User
      summary: Pobranie powiązanych plików jako zip
      operationId: downloadAttachedFiles
      parameters:
      - name: documentId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
      security:
      - Authorization: []
  /api/v1/Tutorial:
    get:
      tags:
      - Tutorial
      summary: Listowanie danych o tutorialach (z paginacją - odata).
      operationId: queryTutorials
      parameters:
      - name: $skip
        in: query
        required: false
        schema:
          type: integer
          format: int64
          default: 0
      - name: $top
        in: query
        required: false
        schema:
          type: integer
          format: int64
          default: 10
          maximum: 1000
      - name: $inlinecount
        in: query
        required: false
        schema:
          type: string
          default: allpages
      - name: $orderby
        in: query
        required: false
        schema:
          type: string
          default: creationTime desc
      - name: $filter
        in: query
        required: false
        schema:
          type: string
          default: ()
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/OdataResponseQueryTutorialItemSp4euResponse'
      security:
      - Authorization: []
  /api/v1/Tutorial/{id}:
    get:
      tags:
      - Tutorial
      summary: Pobranie danych o tutorialu o podanym id.
      operationId: getTutorialById
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Sp4euTutorialResponse'
      security:
      - Authorization: []
  /api/v1/Profile/{id}:
    get:
      tags:
      - Profile
      summary: Czytanie profilu z podanym id
      operationId: getProfileById
      pa

# --- truncated at 32 KB (90 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/university-of-warsaw/refs/heads/main/openapi/university-of-warsaw-sp4eu-api-openapi.yml