# REST API: Pro végpontok

> A Tutor LMS Pro REST API-ja: kurzusok, témák, leckék, feladatok, kvízek, beiratkozások, kívánságlista, értékelések, profil és kérdések-válaszok.

A Tutor LMS Pro REST API-jával az adatokat létrehozhatod, olvashatod, módosíthatod és törölheted JSON-kérésekkel. A hitelesítés menetét lásd a [REST API: áttekintés és hitelesítés](https://hub.hellowp.io/hu/plugins/tutor-pro/fejlesztoknek-rest-api-hitelesites/) fejezetben. Az alábbi címekben az `oldalad-cime.hu` helyére a saját weboldalad címe kerüljön, mindegyik a `/wp-json/tutor/v1/` előtaggal kezdődik.

## Kurzus API

Kurzust létrehozhatsz, megtekinthetsz, módosíthatsz és törölhetsz, rendezheted ár szerint, lekérheted az értékeléseit és a részleteit.

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `post_author` | szám | igen | A szerző (adminisztrátor) azonosítója. |
| `post_date` | dátum-idő | nem | A kurzus létrehozásának ideje az oldal időzónájában, `ÉÉÉÉ-HH-NN ÓÓ:PP:MP` formában. |
| `post_date_gmt` | dátum-idő | nem | A létrehozás ideje GMT-ben. |
| `post_content` | szöveg | igen | A kurzus tartalma. |
| `post_title` | szöveg | igen | A kurzus címe. |
| `post_excerpt` | szöveg | nem | A kurzus rövid leírása. |
| `post_status` | szöveg | igen | A kurzus állapota. |
| `post_password` | szöveg | nem | A kurzust védő jelszó. |
| `comment_status` | szöveg | nem | Nyitva vannak-e a hozzászólások. |
| `post_modified`, `post_modified_gmt` | dátum-idő | nem | A módosítás ideje az oldal időzónájában, illetve GMT-ben. |
| `post_content_filtered` | szöveg | nem | Szűrt kurzustartalom. |
| `additional_content` | objektum | nem | További kurzusadatok: `course_benefits` (mit tanulnak a hallgatók), `course_target_audience` (célközönség), `course_duration` (`hours` és `minutes`), `course_material_includes` (mellékelt anyagok), `course_requirements` (követelmények). |
| `video` | objektum | nem | A videó: `source_type` (`external_url`, `shortcode`, `youtube`, `vimeo` vagy beágyazott) és `source` (a hivatkozás). |
| `course_level` | szöveg | nem | A kurzus szintje: `beginner`, `intermediate` vagy `expert`. |
| `course_categories` | szám tömb | nem | A kategóriák azonosítói. |
| `course_tags` | szám tömb | nem | A címkék azonosítói. |
| `thumbnail_id` | szám | nem | A kiemelt kép azonosítója. |

Minta kérés törzs:

```json
{
  "post_author": 1,
  "post_title": "Bevezetés a matematikába",
  "post_content": "A kurzus az alapműveletekkel, az algebrával és a geometriával foglalkozik.",
  "post_excerpt": "Alapozó matematika kurzus.",
  "post_status": "publish",
  "comment_status": "open",
  "additional_content": {
    "course_benefits": "A kurzus előnyei",
    "course_target_audience": "Kezdők",
    "course_duration": { "hours": "1", "minutes": "10" },
    "course_material_includes": "Mellékelt anyagok",
    "course_requirements": "Követelmények"
  },
  "video": { "source_type": "youtube", "source": "https://www.youtube.com/watch?v=PELDA" },
  "course_level": "beginner",
  "course_categories": [161, 163],
  "course_tags": [18, 19],
  "thumbnail_id": 0
}
```

| Művelet | Cím | Módszer |
|---|---|---|
| Kurzus létrehozása | `/courses` | POST |
| Kurzusok listája | `/courses?order=desc&orderby=ID&paged=1` | GET |
| Kurzus módosítása | `/courses/{course_id}` | POST, PUT, PATCH |
| Kurzus törlése | `/courses/{course_id}` | DELETE |
| Kurzus részletei | `/courses/{course_id}` | GET |
| Kurzus témái | `/course-topic/{course_id}` | GET |
| Kurzus befejezettnek jelölése | `/course-mark-complete` | POST |
| Rendezés ár szerint | `/course-sorting-by-price?order=asc&page=1` | GET |
| Kurzus értékelései | `/course-rating/{course_id}` | GET |

## Téma API

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `topic_course_id` | szám | igen | A kurzus azonosítója, amelyhez a téma tartozik. |
| `topic_title` | szöveg | igen | A téma címe. |
| `topic_summary` | szöveg | nem | A téma összefoglalója. |
| `topic_author` | szám | igen | A szerző (adminisztrátor) azonosítója. |

```json
{
  "topic_course_id": 5607,
  "topic_title": "Bevezetés a matematikába",
  "topic_summary": "Az alapműveletek áttekintése.",
  "topic_author": 1
}
```

| Művelet | Cím | Módszer |
|---|---|---|
| Téma létrehozása | `/topics` | POST |
| Témák listája | `/topics?course_id={course_id}` | GET |
| Téma módosítása | `/topics/{topic_id}` | POST, PUT, PATCH |
| Téma törlése | `/topics/{topic_id}` | DELETE |

## Lecke API

Leckét létrehozhatsz, módosíthatsz és törölhetsz, és befejezettnek jelölheted.

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `topic_id` | szám | igen | A téma azonosítója. |
| `course_id` | szám | igen | A kurzus azonosítója. |
| `lesson_title` | szöveg | igen | A lecke címe. |
| `lesson_content` | szöveg | nem | A lecke tartalma. |
| `thumbnail_id` | szám | nem | A kiemelt kép azonosítója. |
| `lesson_author` | szám | igen | A szerző azonosítója. |
| `video` | objektum | nem | `source_type`, `source` és `runtime` (`hours`, `minutes`, `seconds`: a videó hossza). |
| `attachments` | szám tömb | nem | A médiatár elemeinek azonosítói. |
| `preview` | logikai | nem | Engedélyezett-e az előnézet. |

```json
{
  "topic_id": 5608,
  "lesson_title": "Bevezetés a matematikába",
  "lesson_content": "Az alapműveletek áttekintése.",
  "thumbnail_id": 1,
  "lesson_author": 1,
  "video": {
    "source_type": "youtube",
    "source": "https://www.youtube.com/watch?v=PELDA",
    "runtime": { "hours": "00", "minutes": "10", "seconds": "36" }
  },
  "attachments": [110],
  "preview": true
}
```

| Művelet | Cím | Módszer |
|---|---|---|
| Lecke létrehozása | `/lessons/` | POST |
| Lecke lekérése | `/lesson/{lesson_id}` | GET |
| Lecke módosítása | `/lessons/{lesson_id}` | POST, PUT, PATCH |
| Lecke törlése | `/lessons/{lesson_id}` | DELETE |
| Lecke befejezettnek jelölése | `/lesson-mark-complete` | POST |

## Feladat API

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `topic_id` | szám | igen | A téma azonosítója. |
| `assignment_title` | szöveg | igen | A feladat címe. |
| `assignment_author` | szám | igen | A feladat szerzőjének azonosítója. |
| `assignment_content` | szöveg | nem | A feladat tartalma. |
| `attachments` | tömb | nem | A médiatár elemeinek azonosítói. |
| `assignment_options` | objektum | igen | A feladat beállításai (lent). |

Az `assignment_options` mezői: `time_duration` (a beadási határidő: `value` az érték, `unit` az egység: nap, hét, hónap vagy év), `total_mark` (a feladat összpontszáma), `pass_mark` (a sikeres teljesítéshez szükséges legkisebb pontszám), `upload_files_limit` (a feltölthető fájlok száma) és `upload_file_size_limit` (a feltölthető fájl legnagyobb mérete).

```json
{
  "topic_id": 5587,
  "assignment_title": "1. matematika feladat",
  "assignment_author": 1,
  "assignment_content": "<p>A feladat szövege</p>",
  "attachments": [2278],
  "assignment_options": {
    "time_duration": { "value": 1, "unit": "weeks" },
    "total_mark": 10,
    "pass_mark": 2,
    "upload_files_limit": 1,
    "upload_file_size_limit": 2
  }
}
```

| Művelet | Cím | Módszer |
|---|---|---|
| Feladat lekérése | `/course-assignment/{assignment_id}` | GET |
| Feladat létrehozása | `/assignments/` | POST |
| Feladat módosítása | `/assignments/{assignment_id}` | POST, PUT, PATCH |
| Feladat törlése | `/assignments/{assignment_id}` | DELETE |

### Feladat API: hallgatói oldal

A hallgatók ezzel adhatják be a feladatukat, és kérhetik le a feladat adatait és a csatolt fájlokat.

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `assignment_id` | szám | igen | A feladat azonosítója. |
| `assignment_answer` | szöveg | igen | A hallgató válasza. |
| `student_id` | szám | igen | A hallgató azonosítója. |
| `attached_assignment_files[]` | tömb | igen | A csatolt fájlok. |

| Művelet | Cím | Módszer |
|---|---|---|
| A hallgató beadásának lekérése | `/assignments?student_id={student_id}&assignment_id={assignment_id}` | GET |
| Feladat beadása | `/assignment-submit` | POST |
| Beadott feladat módosítása | `/assignment-submit/{assignment_id}` | POST |
| Feladatcsatolmány | `/assignment-attachment/{assignment_id}?file_name={file_name}` | POST |

## Kvíz API

Kvízt és kérdéseket hozhatsz létre, módosíthatsz és törölhetsz, a kvízeket, a kérdéseket és a próbálkozások részleteit azonosító alapján kérheted le.

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `topic_id` | szám | igen | A téma azonosítója. |
| `quiz_title` | szöveg | igen | A kvíz címe. |
| `quiz_author` | szám | igen | A kvíz szerzőjének azonosítója. |
| `quiz_description` | szöveg | nem | A kvíz leírása. |
| `quiz_options` | objektum | igen | A kvíz beállításai (lent). |

A `quiz_options` mezői:

| Mező | Leírás |
|---|---|
| `time_limit` | Időkorlát: `time_value` (az érték) és `time_type` (az egység: `seconds`, `minutes`, `hours`, `days` vagy `weeks`). |
| `feedback_mode` | A visszajelzés módja: `default`, `reveal` vagy `retry`. |
| `question_layout_view` | A kérdések megjelenése. |
| `attempts_allowed` | Hány próbálkozás engedélyezett. |
| `passing_grade` | A sikeres teljesítéshez szükséges eredmény. |
| `max_questions_for_answer` | A megválaszolható kérdések legnagyobb száma. |
| `questions_order` | A kérdések sorrendje. |
| `short_answer_characters_limit` | A rövid válaszos kérdések karakterkorlátja. |
| `open_ended_answer_characters_limit` | A nyílt végű kérdések karakterkorlátja. |

```json
{
  "topic_id": 5587,
  "quiz_title": "Matematika kvíz",
  "quiz_author": 1,
  "quiz_description": "Bevezetés a matematikába kvíz.",
  "quiz_options": {
    "time_limit": { "time_value": 1, "time_type": "minutes" },
    "feedback_mode": "default",
    "question_layout_view": "question_below_each_other",
    "attempts_allowed": 10,
    "passing_grade": 80,
    "max_questions_for_answer": 10,
    "questions_order": "rand",
    "short_answer_characters_limit": 200,
    "open_ended_answer_characters_limit": 500
  }
}
```

Egy kérdés közös mezői: `quiz_id`, `question_title`, `question_type`, `answer_required`, `randomize_question`, `question_mark`, `show_question_mark`, `answer_explanation` és `question_description`. A kérdéstípusonként eltérő mezők:

| Kérdéstípus (`question_type`) | További mezők |
|---|---|
| `true_false` (igaz/hamis) | `correct_answer`: `true` vagy `false`. |
| `single_choice` (egy helyes válasz) | `options`: a lehetőségek tömbje, `correct_answer`: a helyes lehetőség. |
| `multiple_choice` (több helyes válasz) | `options` és `correct_answer`: a helyes lehetőségek tömbje. |
| `fill_in_the_blank` (hiányzó szavak) | `question`: a szöveg `{dash}` helyőrzőkkel a hézagok helyén, `correct_answer`: a helyes szavak a hézagok sorrendjében, függőleges vonal jellel elválasztva. |
| `short_answer` (rövid válasz) | Nincs további kötelező mező. |
| `open_ended` (nyílt végű) | Nincs további kötelező mező. |
| `matching` (párosítás) | `matching_options`: a `left` és `right` oszlop elemei, `correct_answer`: a bal oldali elemekhez tartozó jobb oldali elemek. |

Példa egy egy helyes válaszos kérdésre:

```json
{
  "quiz_id": 5592,
  "question_title": "Melyik NoSQL adatbázis az alábbiak közül?",
  "question_type": "single_choice",
  "options": ["MySQL", "MongoDB", "PostgreSQL"],
  "correct_answer": "MongoDB",
  "answer_required": 1,
  "randomize_question": 1,
  "question_mark": 1.00,
  "show_question_mark": 1,
  "answer_explanation": "A magyarázat szövege",
  "question_description": "A kérdés leírása"
}
```

| Művelet | Cím | Módszer |
|---|---|---|
| Kvíz lekérése | `/quiz/{quiz_id}` | GET |
| Kvíz kérdései és válaszai | `/quiz-question-answer/{quiz_id}` | GET |
| Kvíz létrehozása | `/quizzes` | POST |
| Kvíz módosítása | `/quizzes/{quiz_id}` | POST, PUT, PATCH |
| Kvíz törlése | `/quizzes/{quiz_id}` | DELETE |
| Kérdés létrehozása | `/quiz-questions` | POST |
| Kérdés módosítása | `/quiz-questions/{question_id}` | POST, PUT, PATCH |
| Kérdés törlése | `/quiz-questions/{question_id}` | DELETE |
| Kvíz részletei | `/quizzes/{quiz_id}` | PUT |

## Kvízpróbálkozás API

A hallgatók kvízpróbálkozásainak adatait gyűjtheted vele.

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `course_id` | szám | igen | A kurzus azonosítója. |
| `student_id` | szám | igen | A hallgató azonosítója. |
| `quiz_id` | szám | igen | A kvíz azonosítója. |
| `quiz_question_answers` | tömb | igen | Az egyes kérdésekre adott válaszok: `question_id`, `question_type` és `answer` (szöveg, tömb vagy szám). |

```json
{
  "course_id": 5708,
  "student_id": 2,
  "quiz_id": 5766,
  "quiz_question_answers": [
    { "question_id": 204, "question_type": "true_false", "answer": 461 },
    { "question_id": 205, "question_type": "fill_in_the_blanks", "answer": ["nagy", "por", "forgalom"] },
    { "question_id": 206, "question_type": "multiple_choice", "answer": [460, 465] }
  ]
}
```

| Művelet | Cím | Módszer |
|---|---|---|
| Próbálkozás létrehozása | `/quiz-attempts` | POST |
| Egy próbálkozás lekérése | `/quiz-attempts/{attempt_id}` | GET |
| Egy kvíz próbálkozásai | `/quiz-attempts?quiz_id={quiz_id}&student_id={student_id}` | GET |

## Beiratkozás API

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `user_id` | szám | igen | A beiratkozó felhasználó azonosítója. |
| `course_id` | szám | igen | A kurzus azonosítója. |
| `enrollment_id` | szám | csak az állapot módosításához | A beiratkozás azonosítója. |

```json
{
  "user_id": 2,
  "course_id": 5607
}
```

| Művelet | Cím | Módszer |
|---|---|---|
| Beiratkozás | `/enrollments` | POST |
| Beiratkozás állapotának módosítása | `/enrollments/completed` | PUT |
| A kurzus beiratkozott felhasználói | `/enrollments?course_id={course_id}` | GET |

A beiratkozás lehetséges állapotai: `cancel`, `completed`, `expired`, `failed`, `on-hold`, `pending`, `processing` és `refunded`.

## Kívánságlista API

A felhasználó azonosítóját és a kurzus azonosítóját kéri (`user_id`, `course_id`, mindkettő kötelező szám).

| Művelet | Cím | Módszer |
|---|---|---|
| A hallgató kívánságlistája | `/wishlists?user_id={user_id}` | GET |
| Kurzus felvétele a listára | `/wishlists` | POST |
| Kurzus törlése a listáról | `/wishlists?user_id={user_id}&course_id={course_id}` | DELETE |

## Értékelés API

Egy kurzus értékeléseit listázhatod, vagy a hallgató értékelését felveheted, módosíthatod és törölheted. A mezők: `user_id`, `course_id`, `rating` (az értékelés pontszáma) és `review` (az értékelés szövege), mind kötelező.

```json
{
  "user_id": 3,
  "course_id": 7461,
  "rating": 5,
  "review": "Nagyszerű leckék"
}
```

| Művelet | Cím | Módszer |
|---|---|---|
| A felhasználó értékelései | `/reviews?user_id={user_id}` | GET |
| Értékelés felvétele | `/reviews` | POST |
| Értékelés módosítása | `/reviews/{course_id}` | POST |
| Értékelés törlése | `/reviews/{course_id}?user_id={user_id}` | POST |

## Hallgatói vezérlőpult, naptár, kurzusok és rendelések

| Művelet | Cím | Módszer |
|---|---|---|
| Hallgatói vezérlőpult | `/students/{student_id}/dashboard` | GET |
| Naptár | `/students/{student_id}/calendar` | GET |
| A hallgató kurzusai | `/students/{student_id}/courses` | GET |
| Rendelési előzmények | `/students/{student_id}/order-histories` | GET |
| Oktatóvá válás | `/become-instructor/{user_id}` | PUT |

## Profilkezelés API

| Művelet | Cím | Módszer |
|---|---|---|
| Profil lekérése | `/profile/{user_id}` | GET |
| Profil módosítása | `/update-profile` | PUT |
| Profilkép feltöltése | `/upload-photo/profile-photo` | POST |
| Profilkép törlése | `/delete-photo/profile-photo/{user_id}` | DELETE |
| Jelszó módosítása | `/update-password` | PUT |

## Kérdések és válaszok API

A hallgató kérdéseit és válaszait listázhatod, vehetsz fel, módosíthatsz és törölhetsz.

| Tulajdonság | Típus | Kötelező | Leírás |
|---|---|---|---|
| `user_id` | szám | igen | A felhasználó azonosítója. |
| `course_id` | szám | igen | A kurzus azonosítója. |
| `question_id` | szám | igen | A kérdés azonosítója (0 új kérdésnél). |
| `qna_text` | szöveg | igen | A kérdés vagy a válasz szövege. |

```json
{
  "user_id": 3,
  "course_id": 7378,
  "question_id": 0,
  "qna_text": "Írd ide a választ."
}
```

| Művelet | Cím | Módszer |
|---|---|---|
| Kérdések listája | `/qna?user_id={user_id}&offset={offset}&limit={limit}` | GET |
| Kérdés felvétele vagy módosítása | `/qna` | POST |
| Olvasottnak vagy olvasatlannak jelölés | `/qna-mark-read-unread/{comment_id}` | POST, PUT, PATCH |
| Kérdés törlése | `/qna/{comment_id}?user_id={user_id}` | DELETE |
