---
type: "firecrawl-provider"
description: "Course syllabi of the University of Tartu (Estonia) from its Study Information System, ÕIS2 (ois2.ut.ee), over the public course API: search the course catalogue by title or code, and read any course's ECTS syllabus with learning outcomes, prerequisites, workload, assessment and grading rules (exam and homework weights, retakes), lecturers, weekly topics and every semester version. SIS open data, cited as the terms of use require."
use_when: "Course syllabi of the University of Tartu (Estonia) from its Study Information System, ÕIS2 (ois2.ut.ee), over the public course API: search the course catalogue by title or code, and read any course's ECTS syllabus with learning outcomes, prerequisites, workload, assessment and grading rules (exam and homework weights, retakes), lecturers, weekly topics and every semester version. SIS open data, cited as the terms of use require."
categories: "Research"
capabilities: 2
credits_per_call: 5
---
# University of Tartu Study Information System (ÕIS2) on Firecrawl Alexandria

Course syllabi of the University of Tartu (Estonia) from its Study Information System, ÕIS2 (ois2.ut.ee), over the public course API: search the course catalogue by title or code, and read any course's ECTS syllabus with learning outcomes, prerequisites, workload, assessment and grading rules (exam and homework weights, retakes), lecturers, weekly topics and every semester version. SIS open data, cited as the terms of use require.

- Categories: Research
- Category index: [Research category](https://alexandria.firecrawl.dev/agents/categories/research)
- Provider key: `ois2-ut-ee`
- Access: Firecrawl credits
- Cost: 5 credits per call

## More

- [Human guide](https://www.firecrawl.dev/app/alexandria/ois2-ut-ee)
- [OpenAPI spec](https://alexandria.firecrawl.dev/agents/providers/ois2-ut-ee/openapi.json)

## Capabilities

- [Get course](https://alexandria.firecrawl.dev/agents/providers/ois2-ut-ee/courses/get_course): One University of Tartu course syllabus (ECTS course description) from ÕIS2 by course code, UUID or pasted ois2.ut.ee course URL: title, credits, faculty and unit, study levels, teaching languages, description, objectives, learning outcomes, prerequisites, workload hours (lecture, practice, independent work...), assessment and grading (scale, preconditions, how the grade is formed, each assessment with its description such as exam weights, retake rules), lecturers, learning mode, course website and materials, the week-by-week schedule of topics, every available semester version, the page URL and last update. Defaults to the latest version; version (UUID or version code) or academic_year/semester pick another. English text with Estonian where no English exists. Unknown courses or versions are not_found.
- [Search courses](https://alexandria.firecrawl.dev/agents/providers/ois2-ut-ee/courses/search_courses): Search the University of Tartu course catalogue (ÕIS2) by title words in English or Estonian and/or a course code or code prefix (LTAT.05 lists a department's courses), optionally only courses taught in a language or at a study level. Each result: code, UUID, English and Estonian title, ECTS credits, course type, state, latest version UUID, last update and the course page URL. Results are ranked exact title, title prefix, title substring, then by code; ÕIS2 answers at most 300 matches per search, flagged by total_capped. Pages through next_cursor.

## 1. Choose this provider when

Course syllabi of the University of Tartu (Estonia) from its Study Information System, ÕIS2 (ois2.ut.ee), over the public course API: search the course catalogue by title or code, and read any course's ECTS syllabus with learning outcomes, prerequisites, workload, assessment and grading rules (exam and homework weights, retakes), lecturers, weekly topics and every semester version. SIS open data, cited as the terms of use require.

## 2. Minimal request

Call `POST https://api.firecrawl.dev/v2/scrape` with `{ alexandria: { provider, capability, options } }`. For a batch, send `{ alexandria: [...] }` with up to 10 calls.

```json
{
  "provider": "ois2-ut-ee",
  "capability": "courses/get_course",
  "options": {
    "course": "MTAT.03.286",
    "version": "8298c620-8dee-d699-bcaf-3e4f9d6b12e3"
  }
}
```

## 3. Add provider options

Use only the options needed for the task:

- `academic_year` (string): Academic year the version belongs to, written as its start year or in full: 2024 or 2024/2025 (spring 2025 is in 2024/2025). Pattern: ^\d{4}(/\d{4})?$. Example: `<academic_year>`
- `course` (string): Course code (e.g. MTAT.03.286) or course UUID. Example: `<course>`
- `semester` (string): Semester of the version; with academic_year or alone (the newest such semester). Example: `autumn`
- `url` (string): Alternatively an ois2.ut.ee course page, e.g. https://ois2.ut.ee/#/courses/LTAT.05.006/details or .../version/<uuid>/details (selects that version). Pattern: ^https?://. Example: `<url>`
- `version` (string): Version UUID or version code (e.g. lt-2024-autumn-fulltime-en) from versions; default the latest. Example: `<version>`

## 4. Request through your preferred interface

### JavaScript

```javascript
const result = await firecrawl.scrape({
  alexandria: {
    provider: "ois2-ut-ee",
    capability: "courses/get_course",
    options: {
      course: "MTAT.03.286",
      version: "8298c620-8dee-d699-bcaf-3e4f9d6b12e3",
    },
  },
});
```

### Python

```python
result = firecrawl.scrape_alexandria({
  "provider": "ois2-ut-ee",
  "capability": "courses/get_course",
  "options": {
    "course": "MTAT.03.286",
    "version": "8298c620-8dee-d699-bcaf-3e4f9d6b12e3"
  }
})
```

### cURL

```sh
curl https://api.firecrawl.dev/v2/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "alexandria": {
    "provider": "ois2-ut-ee",
    "capability": "courses/get_course",
    "options": {
      "course": "MTAT.03.286",
      "version": "8298c620-8dee-d699-bcaf-3e4f9d6b12e3"
    }
  }
}'
```

### CLI

```sh
firecrawl scrape 'ois2-ut-ee/courses/get_course' \
  --options '{"course":"MTAT.03.286","version":"8298c620-8dee-d699-bcaf-3e4f9d6b12e3"}'
```


### MCP

Call the FCX MCP retrieve tool with this object:

```json
{
  "provider": "ois2-ut-ee",
  "capability": "courses/get_course",
  "options": {
    "course": "MTAT.03.286",
    "version": "8298c620-8dee-d699-bcaf-3e4f9d6b12e3"
  }
}
```

Ask for only the returned fields needed by the task.

## 5. Full request shape

```json
{
  "provider": "ois2-ut-ee",
  "capability": "courses/get_course",
  "options": {
    "course": "MTAT.03.286",
    "version": "8298c620-8dee-d699-bcaf-3e4f9d6b12e3"
  }
}
```

## 6. Response data

The response includes `success`, `provider`, `capability`, `creditsCost` and `data`. This example shows the provider payload in `data`:

```json
{
  "attribution": "Source: University of Tartu Study Information System (ÕIS2), https://ois2.ut.ee/. SIS open data (terms of use 5.9 and 5.10): cite the source and keep re-used data up to date.",
  "code": "MTAT.03.286",
  "course_type": "Regular course",
  "course_uuid": "94117df6-4e9e-8d28-1620-209a32b7f8ae",
  "credit_type": "ECTS",
  "credits": 6,
  "description": "The course covers the following topics: Fast Fourier Transform, fast multiplication of the polynomials using FFT, efficient algorithm for finding maximun flow in the network, max-flow in 0-1 network, finding min-cost maximum flow, linear programming, primal and dual problems, approximation algorithms for various combinatorial problems (set cover, travelling salesman problem, minimum feedback set problem), using linear-programming in approximation algorithms, primal-dual approach.",
  "faculty": "Faculty of Science and Technology",
  "grading": {
    "assessment_scale": "differentiated (A, B, C, D, E, F, not present)",
    "assessments": [
      {
        "description": "Homeworks: 30% of the final grade\nMidterm exam: 30% of the final grade\nFinal exam: 40% of the final grade",
        "due_date": null,
        "type": "report"
      }
    ],
    "criteria": null,
    "evaluation": "The final grade will be established based on the homework assignments, midterm and final exam",
    "independent_work": "see https://courses.cs.ut.ee/",
    "methodology": null,
    "min_points_from_tests": null,
    "preconditions": "Submission of homeworks, midterm and final exam",
    "results_available_from": null,
    "retake": "One supplementary exam will be offered to students who are unable to attend the first exam or who fail the first exam."
  },
  "hours": {
    "colloquium": 0,
    "independent_work": 94,
    "individual_work": 0,
    "internship": 0,
    "lecture": 32,
    "practice": 30,
    "seminar": 0,
    "total": 156,
    "web_learning": 0
  },
  "joint_course_coordinated_by": null,
  "last_update": "2026-06-30T11:39:40",
  "learning_mode": "blended learning",
  "learning_outcomes": [
    "After completing this course, the student will be able:",
    "* to use various algorithmic techniques and concepts, such as fast Fourier transform, maximum flow in the networks, linear-programming, approximation algorithm techniques",
    "* to be able to analyze the time complexity of the algorithms, to prove their correctness, and to show approximation factor (for approximation algorithms)",
    "* to read and understand medium-difficulty mathematical and computer science texts in the area;",
    "*\tto develop appropriate algorithms for a variety of applied problems, to analyze their performance and prove their correctness"
  ],
  "lecturers": [
    {
      "name": "Kristjan Kõiv",
      "responsible": false,
      "roles": [
        "supervisor of practical class"
      ],
      "teaching": true,
      "unit": "Institute of Computer Science"
    },
    {
      "name": "Sander Mikelsaar",
      "responsible": false,
      "roles": [
        "supervisor of practical class"
      ],
      "teaching": true,
      "unit": "Chair of Security and Theoretical Computer Science"
    },
    {
      "name": "Hans Kristjan Veri",
      "responsible": false,
      "roles": [
        "supervisor of practical class"
      ],
      "teaching": true,
      "unit": "Institute of Computer Science"
    },
    {
      "name": "Vitaly Skachek",
      "responsible": true,
      "roles": [],
      "teaching": true,
      "unit": "Chair of Security and Theoretical Computer Science"
    }
  ],
  "mandatory_materials": null,
  "materials": [],
  "notes": null,
  "objectives": [
    "Understand the variety of techniques for development and analysis of algorithms for various fundamental problems in computer science."
  ],
  "observed_at_ms": 1794523822125,
  "prerequisites": [],
  "recommended_materials": null,
  "schedule": {
    "entries": [
      {
        "description": "Properties of trees. Proof of correctness of Prim's algorithm.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "O()-notation. Comparison of complexity functions. Trees.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Min-cut max-flow theorem. Finding a maximum matching in a bipartite graph.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Correctness of Dinitz algorithm. Finding vertex-disjoint path cover.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Vertex cover in a bipartite graph. Flow networks with lower and upper limits.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Divide an conquer: merge sort, Karatsuba algorithm, Strassen algorithm",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Fast Fourier Transform: examples.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Schwartz-Zippel lemma and polynomial identity testing. Karger's algorithm.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Linear programming: primal and dual problems, weak and strong duality theorems.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Simplex method using tableau format.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Set Cover problem. Traveling Salesman problem.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "PTAS and FPTAS. Knapsack problem.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Using LP in approximation algorithms. Dual fitting based proof for the set cover problem. Rounding algorithm for the set cover.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Flow in networks",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Introduction into graph theory. Trees.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Prim and Kruskal algorithm.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Dinitz algorithm.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Dinitz algorithm in 0-1 networks",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Flow networks with lower and upper limits (cont.) Multiplication of polynomials",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Fast Fourier Transform",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Probabilistic algorithms. Rabin-Miller algorithm for primality testing",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Karger's algorithm (cont.) Linear programming problems",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Simplex algorithm",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Simplex algorithm: degeneracy example. Approximation algorithms. Vertex Cover problem",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Travelling Salesman Problem in directed graphs",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "PTAS for the bin packing problem",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Minimum spanning trees.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      }
    ],
    "weeks": "1.-16. õppenädal"
  },
  "study_languages": [
    "English"
  ],
  "study_levels": [
    "master's studies",
    "doctoral studies"
  ],
  "terms_url": "https://wiki.ut.ee/spaces/oppejoud/pages/196182907/",
  "title": "Design and Analysis of Algorithms",
  "title_et": "Algoritmide kavandamine ja analüüs",
  "unit": "Chair of Security and Theoretical Computer Science",
  "url": "https://ois2.ut.ee/#/courses/MTAT.03.286/version/8298c620-8dee-d699-bcaf-3e4f9d6b12e3/details",
  "version": {
    "academic_year": "2024/2025",
    "code": "lt-2024-autumn-fulltime-en",
    "label": "24/25 A regular LT Eng",
    "language": "English",
    "semester": "autumn",
    "state": "confirmed",
    "study_type": "regular studies",
    "uuid": "8298c620-8dee-d699-bcaf-3e4f9d6b12e3"
  },
  "versions": [
    {
      "academic_year": "2013/2014",
      "code": "mt-2013-autumn-fulltime-c6",
      "language": "Estonian",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "ad7550a5-66ae-99a9-5663-22e3b76f7f5f"
    },
    {
      "academic_year": "2014/2015",
      "code": "mt-2014-autumn-fulltime-c6",
      "language": "Estonian",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "28a045f6-2c02-5628-6e61-abddddbba85e"
    },
    {
      "academic_year": "2015/2016",
      "code": "lt-2015-spring-fulltime-c6-en",
      "language": "English",
      "semester": "spring",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "ac9815a9-428f-2366-895d-e7d67230059d"
    },
    {
      "academic_year": "2016/2017",
      "code": "lt-2016-spring-fulltime-c6-en",
      "language": "English",
      "semester": "spring",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "4b638015-5814-939a-bd88-c19cbb5e6eaf"
    },
    {
      "academic_year": "2018/2019",
      "code": "lt-2018-autumn-fulltime-c6-en",
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "bfdb24bb-2da5-ccab-dbd4-d408e132858b"
    },
    {
      "academic_year": "2019/2020",
      "code": "lt-2019-autumn-fulltime-c6-en",
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "cd32df7c-8584-3b65-b70c-f5f792f69b25"
    },
    {
      "academic_year": "2020/2021",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "98d35205-5998-6341-17e3-f6ef401c30f4"
    },
    {
      "academic_year": "2021/2022",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "8d9bb014-d9ae-b18b-fd56-a34d5d0c424b"
    },
    {
      "academic_year": "2022/2023",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "304bcbb5-e497-597d-da81-cb54a6ba6ed7"
    },
    {
      "academic_year": "2023/2024",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "1ea5261f-aaff-a881-2e52-dcd6bb854764"
    },
    {
      "academic_year": "2024/2025",
      "code": "lt-2024-autumn-fulltime-en",
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "8298c620-8dee-d699-bcaf-3e4f9d6b12e3"
    },
    {
      "academic_year": "2025/2026",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "c4e12143-7a2c-52bf-4531-5185940652fe"
    },
    {
      "academic_year": "2026/2027",
      "code": "lt-2026-autumn-fulltime-en",
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "a542ea3b-0018-e7fe-c13b-96f958e80eb6"
    }
  ],
  "website_url": "https://courses.cs.ut.ee/"
}
```

## API reference-derived contract

The following capability contract is generated from the same normalized Alexandria API reference exposed in the API spec.

### Get course

- Capability: `courses/get_course`
- Description: One University of Tartu course syllabus (ECTS course description) from ÕIS2 by course code, UUID or pasted ois2.ut.ee course URL: title, credits, faculty and unit, study levels, teaching languages, description, objectives, learning outcomes, prerequisites, workload hours (lecture, practice, independent work...), assessment and grading (scale, preconditions, how the grade is formed, each assessment with its description such as exam weights, retake rules), lecturers, learning mode, course website and materials, the week-by-week schedule of topics, every available semester version, the page URL and last update. Defaults to the latest version; version (UUID or version code) or academic_year/semester pick another. English text with Estonian where no English exists. Unknown courses or versions are not_found.
- Instructions: To read what a University of Tartu course covers and how it is assessed (exam and homework weights, pass conditions, retakes, workload, prerequisites), to compare a course across semesters, or to check a course for credit transfer, given its code (from search_courses) or its ois2.ut.ee page.
- Cost: 5 credits per call
- Capability file: [Get course](https://alexandria.firecrawl.dev/agents/providers/ois2-ut-ee/courses/get_course)

Accepted options:
- `academic_year` (string): Academic year the version belongs to, written as its start year or in full: 2024 or 2024/2025 (spring 2025 is in 2024/2025). Pattern: ^\d{4}(/\d{4})?$. Example: `<academic_year>`
- `course` (string): Course code (e.g. MTAT.03.286) or course UUID. Example: `<course>`
- `semester` (string): Semester of the version; with academic_year or alone (the newest such semester). Example: `autumn`
- `url` (string): Alternatively an ois2.ut.ee course page, e.g. https://ois2.ut.ee/#/courses/LTAT.05.006/details or .../version/<uuid>/details (selects that version). Pattern: ^https?://. Example: `<url>`
- `version` (string): Version UUID or version code (e.g. lt-2024-autumn-fulltime-en) from versions; default the latest. Example: `<version>`

Response schema example:
```json
{
  "attribution": "Source: University of Tartu Study Information System (ÕIS2), https://ois2.ut.ee/. SIS open data (terms of use 5.9 and 5.10): cite the source and keep re-used data up to date.",
  "code": "MTAT.03.286",
  "course_type": "Regular course",
  "course_uuid": "94117df6-4e9e-8d28-1620-209a32b7f8ae",
  "credit_type": "ECTS",
  "credits": 6,
  "description": "The course covers the following topics: Fast Fourier Transform, fast multiplication of the polynomials using FFT, efficient algorithm for finding maximun flow in the network, max-flow in 0-1 network, finding min-cost maximum flow, linear programming, primal and dual problems, approximation algorithms for various combinatorial problems (set cover, travelling salesman problem, minimum feedback set problem), using linear-programming in approximation algorithms, primal-dual approach.",
  "faculty": "Faculty of Science and Technology",
  "grading": {
    "assessment_scale": "differentiated (A, B, C, D, E, F, not present)",
    "assessments": [
      {
        "description": "Homeworks: 30% of the final grade\nMidterm exam: 30% of the final grade\nFinal exam: 40% of the final grade",
        "due_date": null,
        "type": "report"
      }
    ],
    "criteria": null,
    "evaluation": "The final grade will be established based on the homework assignments, midterm and final exam",
    "independent_work": "see https://courses.cs.ut.ee/",
    "methodology": null,
    "min_points_from_tests": null,
    "preconditions": "Submission of homeworks, midterm and final exam",
    "results_available_from": null,
    "retake": "One supplementary exam will be offered to students who are unable to attend the first exam or who fail the first exam."
  },
  "hours": {
    "colloquium": 0,
    "independent_work": 94,
    "individual_work": 0,
    "internship": 0,
    "lecture": 32,
    "practice": 30,
    "seminar": 0,
    "total": 156,
    "web_learning": 0
  },
  "joint_course_coordinated_by": null,
  "last_update": "2026-06-30T11:39:40",
  "learning_mode": "blended learning",
  "learning_outcomes": [
    "After completing this course, the student will be able:",
    "* to use various algorithmic techniques and concepts, such as fast Fourier transform, maximum flow in the networks, linear-programming, approximation algorithm techniques",
    "* to be able to analyze the time complexity of the algorithms, to prove their correctness, and to show approximation factor (for approximation algorithms)",
    "* to read and understand medium-difficulty mathematical and computer science texts in the area;",
    "*\tto develop appropriate algorithms for a variety of applied problems, to analyze their performance and prove their correctness"
  ],
  "lecturers": [
    {
      "name": "Kristjan Kõiv",
      "responsible": false,
      "roles": [
        "supervisor of practical class"
      ],
      "teaching": true,
      "unit": "Institute of Computer Science"
    },
    {
      "name": "Sander Mikelsaar",
      "responsible": false,
      "roles": [
        "supervisor of practical class"
      ],
      "teaching": true,
      "unit": "Chair of Security and Theoretical Computer Science"
    },
    {
      "name": "Hans Kristjan Veri",
      "responsible": false,
      "roles": [
        "supervisor of practical class"
      ],
      "teaching": true,
      "unit": "Institute of Computer Science"
    },
    {
      "name": "Vitaly Skachek",
      "responsible": true,
      "roles": [],
      "teaching": true,
      "unit": "Chair of Security and Theoretical Computer Science"
    }
  ],
  "mandatory_materials": null,
  "materials": [],
  "notes": null,
  "objectives": [
    "Understand the variety of techniques for development and analysis of algorithms for various fundamental problems in computer science."
  ],
  "observed_at_ms": 1794523822125,
  "prerequisites": [],
  "recommended_materials": null,
  "schedule": {
    "entries": [
      {
        "description": "Properties of trees. Proof of correctness of Prim's algorithm.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "O()-notation. Comparison of complexity functions. Trees.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Min-cut max-flow theorem. Finding a maximum matching in a bipartite graph.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Correctness of Dinitz algorithm. Finding vertex-disjoint path cover.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Vertex cover in a bipartite graph. Flow networks with lower and upper limits.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Divide an conquer: merge sort, Karatsuba algorithm, Strassen algorithm",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Fast Fourier Transform: examples.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Schwartz-Zippel lemma and polynomial identity testing. Karger's algorithm.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Linear programming: primal and dual problems, weak and strong duality theorems.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Simplex method using tableau format.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Set Cover problem. Traveling Salesman problem.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "PTAS and FPTAS. Knapsack problem.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Using LP in approximation algorithms. Dual fitting based proof for the set cover problem. Rounding algorithm for the set cover.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      },
      {
        "description": "Flow in networks",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Introduction into graph theory. Trees.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Prim and Kruskal algorithm.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Dinitz algorithm.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Dinitz algorithm in 0-1 networks",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Flow networks with lower and upper limits (cont.) Multiplication of polynomials",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Fast Fourier Transform",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Probabilistic algorithms. Rabin-Miller algorithm for primality testing",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Karger's algorithm (cont.) Linear programming problems",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Simplex algorithm",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Simplex algorithm: degeneracy example. Approximation algorithms. Vertex Cover problem",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Travelling Salesman Problem in directed graphs",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "PTAS for the bin packing problem",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "lecture"
      },
      {
        "description": "Minimum spanning trees.",
        "time": null,
        "topic": null,
        "topic_number": null,
        "week": null,
        "work_type": "practical session"
      }
    ],
    "weeks": "1.-16. õppenädal"
  },
  "study_languages": [
    "English"
  ],
  "study_levels": [
    "master's studies",
    "doctoral studies"
  ],
  "terms_url": "https://wiki.ut.ee/spaces/oppejoud/pages/196182907/",
  "title": "Design and Analysis of Algorithms",
  "title_et": "Algoritmide kavandamine ja analüüs",
  "unit": "Chair of Security and Theoretical Computer Science",
  "url": "https://ois2.ut.ee/#/courses/MTAT.03.286/version/8298c620-8dee-d699-bcaf-3e4f9d6b12e3/details",
  "version": {
    "academic_year": "2024/2025",
    "code": "lt-2024-autumn-fulltime-en",
    "label": "24/25 A regular LT Eng",
    "language": "English",
    "semester": "autumn",
    "state": "confirmed",
    "study_type": "regular studies",
    "uuid": "8298c620-8dee-d699-bcaf-3e4f9d6b12e3"
  },
  "versions": [
    {
      "academic_year": "2013/2014",
      "code": "mt-2013-autumn-fulltime-c6",
      "language": "Estonian",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "ad7550a5-66ae-99a9-5663-22e3b76f7f5f"
    },
    {
      "academic_year": "2014/2015",
      "code": "mt-2014-autumn-fulltime-c6",
      "language": "Estonian",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "28a045f6-2c02-5628-6e61-abddddbba85e"
    },
    {
      "academic_year": "2015/2016",
      "code": "lt-2015-spring-fulltime-c6-en",
      "language": "English",
      "semester": "spring",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "ac9815a9-428f-2366-895d-e7d67230059d"
    },
    {
      "academic_year": "2016/2017",
      "code": "lt-2016-spring-fulltime-c6-en",
      "language": "English",
      "semester": "spring",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "4b638015-5814-939a-bd88-c19cbb5e6eaf"
    },
    {
      "academic_year": "2018/2019",
      "code": "lt-2018-autumn-fulltime-c6-en",
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "bfdb24bb-2da5-ccab-dbd4-d408e132858b"
    },
    {
      "academic_year": "2019/2020",
      "code": "lt-2019-autumn-fulltime-c6-en",
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "cd32df7c-8584-3b65-b70c-f5f792f69b25"
    },
    {
      "academic_year": "2020/2021",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "98d35205-5998-6341-17e3-f6ef401c30f4"
    },
    {
      "academic_year": "2021/2022",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "8d9bb014-d9ae-b18b-fd56-a34d5d0c424b"
    },
    {
      "academic_year": "2022/2023",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "304bcbb5-e497-597d-da81-cb54a6ba6ed7"
    },
    {
      "academic_year": "2023/2024",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "1ea5261f-aaff-a881-2e52-dcd6bb854764"
    },
    {
      "academic_year": "2024/2025",
      "code": "lt-2024-autumn-fulltime-en",
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "8298c620-8dee-d699-bcaf-3e4f9d6b12e3"
    },
    {
      "academic_year": "2025/2026",
      "code": null,
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "c4e12143-7a2c-52bf-4531-5185940652fe"
    },
    {
      "academic_year": "2026/2027",
      "code": "lt-2026-autumn-fulltime-en",
      "language": "English",
      "semester": "autumn",
      "state": "confirmed",
      "study_type": "regular studies",
      "uuid": "a542ea3b-0018-e7fe-c13b-96f958e80eb6"
    }
  ],
  "website_url": "https://courses.cs.ut.ee/"
}
```

### Search courses

- Capability: `courses/search_courses`
- Description: Search the University of Tartu course catalogue (ÕIS2) by title words in English or Estonian and/or a course code or code prefix (LTAT.05 lists a department's courses), optionally only courses taught in a language or at a study level. Each result: code, UUID, English and Estonian title, ECTS credits, course type, state, latest version UUID, last update and the course page URL. Results are ranked exact title, title prefix, title substring, then by code; ÕIS2 answers at most 300 matches per search, flagged by total_capped. Pages through next_cursor.
- Instructions: To find University of Tartu courses on a topic or in a department (e.g. English-taught master's courses on machine learning, all LTAT.05 software engineering courses) before reading a syllabus with get_course.
- Cost: 5 credits per call
- Capability file: [Search courses](https://alexandria.firecrawl.dev/agents/providers/ois2-ut-ee/courses/search_courses)

Accepted options:
- `code` (string): Course code or prefix, e.g. LTAT.03.003 or LTAT.05. Pattern: ^[A-Za-z0-9.]+$. Example: `<code>`
- `cursor` (string): next_cursor from an earlier call. Pattern: ^[0-9]{1,3}$. Example: `<cursor>`
- `limit` (number): Results per page (default 20). Example: `10`
- `study_language` (string): Only courses with a version taught in this language (ISO 639 code): en, et, ru, de, ... Example: `et`
- `study_level` (string[]): Only courses offered at these study levels, e.g. ["master"]. Example: `[]`
- `title` (string): Words in the course title, English or Estonian, e.g. machine learning or algoritm. Example: `<title>`

Response schema example:
```json
{
  "attribution": "Source: University of Tartu Study Information System (ÕIS2), https://ois2.ut.ee/. SIS open data (terms of use 5.9 and 5.10): cite the source and keep re-used data up to date.",
  "count": 9,
  "next_cursor": null,
  "observed_at_ms": 1794523820367,
  "query": {
    "code": null,
    "limit": 20,
    "study_language": null,
    "study_level": [],
    "title": "algorithms"
  },
  "results": [
    {
      "code": "ITI0050",
      "course_type": "Joint curriculum course",
      "credits": 5,
      "last_update": "2026-06-30T11:39:35",
      "latest_version_uuid": null,
      "state": "confirmed",
      "title": "Algorithms and Data Structures",
      "title_et": "Algoritmid ja andmestruktuurid",
      "url": "https://ois2.ut.ee/#/courses/ITI0050/details",
      "uuid": "a99ce3ce-886c-ff8e-6a9b-30814ec25bce"
    },
    {
      "code": "ITI0204",
      "course_type": "Joint curriculum course",
      "credits": 6,
      "last_update": "2026-06-30T11:39:35",
      "latest_version_uuid": null,
      "state": "confirmed",
      "title": "Algorithms and Data Structures",
      "title_et": "Algoritmid ja andmestruktuurid",
      "url": "https://ois2.ut.ee/#/courses/ITI0204/details",
      "uuid": "3160afb1-5a4e-735b-a521-0d1c8315623c"
    },
    {
      "code": "LTAT.03.005",
      "course_type": "Regular course",
      "credits": 6,
      "last_update": "2026-06-30T11:39:35",
      "latest_version_uuid": "c1e70ae2-4eeb-5553-ec0e-048b71d192b3",
      "state": "confirmed",
      "title": "Algorithms and Data Structures",
      "title_et": "Algoritmid ja andmestruktuurid",
      "url": "https://ois2.ut.ee/#/courses/LTAT.03.005/details",
      "uuid": "2fe49029-a6b9-6bdc-ce03-c821ab8a9bc4"
    },
    {
      "code": "P2NC.01.086",
      "course_type": "Regular course",
      "credits": 4,
      "last_update": "2026-06-30T11:39:35",
      "latest_version_uuid": "61cc22ed-5505-37e3-6a08-2f067992e929",
      "state": "confirmed",
      "title": "Algorithms and Data Structures",
      "title_et": "Algoritmid ja andmestruktuurid",
      "url": "https://ois2.ut.ee/#/courses/P2NC.01.086/details",
      "uuid": "72450397-59e4-2234-7e4e-270768813382"
    },
    {
      "code": "SVNC.00.260",
      "course_type": "Regular course",
      "credits": 6,
      "last_update": "2026-06-30T11:39:35",
      "latest_version_uuid": "1158dd05-5ab6-ae24-041a-db260e53dfe9",
      "state": "confirmed",
      "title": "Algorithms and Data Structures",
      "title_et": "Algoritmid ja andmestruktuurid",
      "url": "https://ois2.ut.ee/#/courses/SVNC.00.260/details",
      "uuid": "8dd47948-44d2-b09c-2972-693e448ae003"
    },
    {
      "code": "ITI8590",
      "course_type": "Joint curriculum course",
      "credits": 6,
      "last_update": "2026-06-30T11:39:35",
      "latest_version_uuid": null,
      "state": "confirmed",
      "title": "Advanced Algorithms and Data Structures",
      "title_et": "Algoritmide ja andmestruktuuride erikursus",
      "url": "https://ois2.ut.ee/#/courses/ITI8590/details",
      "uuid": "4d13e9ea-4ab2-ec94-cdcc-8791252f808f"
    },
    {
      "code": "LTAT.03.017",
      "course_type": "Regular course",
      "credits": 6,
      "last_update": "2026-06-30T11:39:35",
      "latest_version_uuid": "6283ed90-821b-7ec5-7804-c5a5f8ea8677",
      "state": "confirmed",
      "title": "Verified Functional Algorithms",
      "title_et": "Kontrollitud funktsionaalsed algoritmid",
      "url": "https://ois2.ut.ee/#/courses/LTAT.03.017/details",
      "uuid": "8cfaa13c-59a7-c871-1a2e-7719f6f3ae77"
    },
    {
      "code": "LTAT.03.029",
      "course_type": "Regular course",
      "credits": 6,
      "last_update": "2026-06-30T11:39:35",
      "latest_version_uuid": "5e5ebf73-cd73-958b-b9ba-f2e4720fb78e",
      "state": "confirmed",
      "title": "Introduction to Algorithms and Data Structures",
      "title_et": "Sissejuhatus algoritmidesse ja andmestruktuuridesse",
      "url": "https://ois2.ut.ee/#/courses/LTAT.03.029/details",
      "uuid": "2a447e3c-8cd1-89be-78da-d3e38f01fd63"
    },
    {
      "code": "MTAT.03.286",
      "course_type": "Regular course",
      "credits": 6,
      "last_update": "2026-06-30T11:39:35",
      "latest_version_uuid": "a542ea3b-0018-e7fe-c13b-96f958e80eb6",
      "state": "confirmed",
      "title": "Design and Analysis of Algorithms",
      "title_et": "Algoritmide kavandamine ja analüüs",
      "url": "https://ois2.ut.ee/#/courses/MTAT.03.286/details",
      "uuid": "94117df6-4e9e-8d28-1620-209a32b7f8ae"
    }
  ],
  "terms_url": "https://wiki.ut.ee/spaces/oppejoud/pages/196182907/",
  "total": 9,
  "total_capped": false
}
```
