> ## Documentation Index
> Fetch the complete documentation index at: https://help.indolat.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Exams API

> Read exam lists, exam details, tests, sessions and exam registration links.

Every request on this page requires a [Bearer API key](https://help.indolat.com/en/api/autentikasi.md).

## Exam endpoints

This page covers the endpoints that read exams. Creating and changing exams, tests and sessions through the API is described in [Exam Setup](https://help.indolat.com/en/api/pengaturan-ujian.md), and questions are sent through the [Question Import API](https://help.indolat.com/en/api/import-soal.md).

### Key exam fields

| Field | Description |
| - | - |
| `is_active` | Exam registration is open. |
| `is_locked` | The exam is locked (for example because it has been archived). A locked exam rejects participant registration through the API. |
| `is_hidden` | The exam is archived and hidden from participants. |
| `is_tiered` | Multi-level exam: tests in the next level open once the previous level is finished. |
| `is_auto_assign_session` | Registered participants are automatically placed in the earliest-created session of each test. If `false`, an admin assigns sessions in the admin panel. |
| `is_must_be_in_order` | Tests must be taken in order of `level`. |
| `is_force_complete` | A test must be finished without a break before the next one. |
| `is_show_score` | The final score is shown to participants in the CBT. It does not limit the scores available through the API. |
| `edition` | `standard` (Standard Exam) or `professional` (Professional Exam). It decides which credit participants use when they start, the maximum number of tests, and whether CAT and camera, screen and dual-monitor proctoring are available. |
| `final_score_type` | How the exam's final score is calculated from the test scores: `1` sum, `2` average. |
| `paid_type` | `1` free, `2` one-time payment, `3` paid per test, `4` paid per level. |

For tests (`exam_quizzes`), `exam_type` is `cbt`, `cat` or `manual`, `duration_minutes` is the test's working time, `score_type` is the scoring method, and the `is_*` fields are the test settings (see [Exam Setup](https://help.indolat.com/en/api/pengaturan-ujian.md)). On a session, `question_bank_id` is the ID of the question package taken in that session.

> [accordion] GET /exams — List exams
>
> ### Parameters
>
> | Name | Location | Required | Type | Description |
> | - | - | -: | - | - |
> | `search` | Query | No | string | Searches the exam name or short name. |
> | `is_active` | Query | No | boolean | Filters by active status. |
> | `is_tiered` | Query | No | boolean | Filters multi-level exams. |
> | `start_from` | Query | No | datetime | Earliest start time, in ISO 8601 format; must be URL-encoded. |
> | `start_until` | Query | No | datetime | Latest start time, in ISO 8601 format; must be URL-encoded. |
> | `page` | Query | No | integer | Page number. Default `1`. |
> | `per_page` | Query | No | integer | Items per page, `1–100`. Default `25`. |
>
> ### Example request
>
> ```bash theme={null}
> curl -X GET "https://app.indolat.com/api/v1/exams?search=Tes%20Masuk&is_active=true&page=1&per_page=25" \
>   -H "Authorization: Bearer <API_KEY>" \
>   -H "Accept: application/json"
> ```
>
> ### Example response
>
> ```json theme={null}
> {
>   "success": true,
>   "message": null,
>   "data": [
>     {
>       "id": 12,
>       "name": "Tes Masuk 2026",
>       "name_short": "TPA",
>       "slug": "tes-masuk-2026",
>       "description": "Seleksi penerimaan peserta didik baru.",
>       "price": 0,
>       "start_at": "2026-08-10T08:00:00+07:00",
>       "end_at": "2026-08-10T12:00:00+07:00",
>       "is_active": true,
>       "is_locked": false,
>       "is_hidden": false,
>       "is_tiered": false,
>       "is_auto_assign_session": true,
>       "is_show_score": true,
>       "final_score_type": 2,
>       "final_score_type_label": "Rata-Rata Tes Ujian",
>       "paid_type": 1,
>       "paid_type_label": "Gratis",
>       "registration_quota": 500,
>       "participants_count": 120,
>       "created_at": "2026-07-01T08:00:00+07:00",
>       "updated_at": "2026-07-30T08:00:00+07:00"
>     }
>   ],
>   "meta": {
>     "pagination": { "total": 1, "per_page": 25, "current_page": 1, "last_page": 1, "from": 1, "to": 1 }
>   }
> }
> ```

> [accordion] GET /exams/\{exam} — Exam details
>
> ### Parameters
>
> | Name | Location | Required | Type | Description |
> | - | - | -: | - | - |
> | `exam` | Path | Yes | integer | Exam ID. |
>
> ### Example request
>
> ```bash theme={null}
> curl -X GET "https://app.indolat.com/api/v1/exams/12" \
>   -H "Authorization: Bearer <API_KEY>" \
>   -H "Accept: application/json"
> ```
>
> ### Example response
>
> ```json theme={null}
> {
>   "success": true,
>   "message": null,
>   "data": {
>     "id": 12,
>     "name": "Tes Masuk 2026",
>     "name_short": "TPA",
>     "slug": "tes-masuk-2026",
>     "description": "Seleksi penerimaan peserta didik baru.",
>     "price": 0,
>     "start_at": "2026-08-10T08:00:00+07:00",
>     "end_at": "2026-08-10T12:00:00+07:00",
>     "is_active": true,
>     "is_locked": false,
>     "is_hidden": false,
>     "is_tiered": false,
>     "is_auto_assign_session": true,
>     "is_must_be_in_order": false,
>     "is_force_complete": false,
>     "is_show_score": true,
>     "edition": "professional",
>     "final_score_type": 2,
>     "final_score_type_label": "Rata-Rata Tes Ujian",
>     "paid_type": 1,
>     "paid_type_label": "Gratis",
>     "registration_quota": 500,
>     "exam_quizzes": [
>       {
>         "id": 45,
>         "exam_id": 12,
>         "name": "Tes Potensi Akademik",
>         "level": 1,
>         "duration_minutes": 90,
>         "exam_type": "cbt",
>         "exam_type_label": "Computer Based Test (CBT)",
>         "score_type": "score",
>         "score_type_label": "Perhitungan Skor Soal (Akumulasi Benar/Salah)",
>         "price": 0,
>         "description": null,
>         "is_show_score": false,
>         "is_show_summary": false,
>         "is_show_explanation_per_question": false,
>         "is_switch_tab_proctoring": true,
>         "is_camera_proctoring": false,
>         "is_screen_proctoring": false,
>         "is_dual_screen_proctoring": false,
>         "is_audio_question_only_once": false,
>         "is_audio_answer_only_once": false,
>         "sessions": [
>           {
>             "id": 91,
>             "exam_quiz_id": 45,
>             "name": "Sesi Pagi",
>             "start_at": "2026-08-10T08:00:00+07:00",
>             "end_at": "2026-08-10T10:00:00+07:00",
>             "question_bank_id": 88
>           }
>         ],
>         "created_at": "2026-07-01T08:00:00+07:00",
>         "updated_at": "2026-07-01T08:00:00+07:00"
>       }
>     ],
>     "participants_count": 120,
>     "created_at": "2026-07-01T08:00:00+07:00",
>     "updated_at": "2026-07-30T08:00:00+07:00"
>   }
> }
> ```

> [accordion] GET /exams/\{exam}/quizzes — List the tests in an exam
>
> Tests are sorted by `level`, then by ID.
>
> ### Parameters
>
> | Name | Location | Required | Type | Description |
> | - | - | -: | - | - |
> | `exam` | Path | Yes | integer | Exam ID. |
>
> ### Example request
>
> ```bash theme={null}
> curl -X GET "https://app.indolat.com/api/v1/exams/12/quizzes" \
>   -H "Authorization: Bearer <API_KEY>" \
>   -H "Accept: application/json"
> ```
>
> ### Example response
>
> ```json theme={null}
> {
>   "success": true,
>   "message": null,
>   "data": [
>     {
>       "id": 45,
>       "exam_id": 12,
>       "name": "Tes Potensi Akademik",
>       "level": 1,
>       "duration_minutes": 90,
>       "exam_type": "cbt",
>       "exam_type_label": "Computer Based Test (CBT)",
>       "score_type": "score",
>       "score_type_label": "Perhitungan Skor Soal (Akumulasi Benar/Salah)",
>       "price": 0,
>       "description": null,
>       "is_show_score": false,
>       "is_show_summary": false,
>       "is_show_explanation_per_question": false,
>       "is_switch_tab_proctoring": true,
>       "is_camera_proctoring": false,
>       "is_screen_proctoring": false,
>       "is_dual_screen_proctoring": false,
>       "is_audio_question_only_once": false,
>       "is_audio_answer_only_once": false,
>       "sessions": [
>         {
>           "id": 91,
>           "exam_quiz_id": 45,
>           "name": "Sesi Pagi",
>           "start_at": "2026-08-10T08:00:00+07:00",
>           "end_at": "2026-08-10T10:00:00+07:00",
>           "question_bank_id": 88
>         }
>       ],
>       "created_at": "2026-07-01T08:00:00+07:00",
>       "updated_at": "2026-07-01T08:00:00+07:00"
>     }
>   ]
> }
> ```

> [accordion] GET /exams/\{exam}/sessions — List exam sessions
>
> Contains the sessions of every test in the exam, sorted by start time.
>
> ### Parameters
>
> | Name | Location | Required | Type | Description |
> | - | - | -: | - | - |
> | `exam` | Path | Yes | integer | Exam ID. |
>
> ### Example request
>
> ```bash theme={null}
> curl -X GET "https://app.indolat.com/api/v1/exams/12/sessions" \
>   -H "Authorization: Bearer <API_KEY>" \
>   -H "Accept: application/json"
> ```
>
> ### Example response
>
> ```json theme={null}
> {
>   "success": true,
>   "message": null,
>   "data": [
>     {
>       "id": 91,
>       "exam_quiz_id": 45,
>       "name": "Sesi Pagi",
>       "start_at": "2026-08-10T08:00:00+07:00",
>       "end_at": "2026-08-10T10:00:00+07:00",
>       "question_bank_id": 88
>     }
>   ]
> }
> ```

> [accordion] GET /exams/\{exam}/registration-link — Self-registration link
>
> Requires the **Exam Registration Page and Automatic Payment** add-on. If the add-on is not active, the request is rejected with status `403`. The returned link is a short link to the exam's self-registration page.
>
> ### Parameters
>
> | Name | Location | Required | Type | Description |
> | - | - | -: | - | - |
> | `exam` | Path | Yes | integer | Exam ID. |
>
> ### Example request
>
> ```bash theme={null}
> curl -X GET "https://app.indolat.com/api/v1/exams/12/registration-link" \
>   -H "Authorization: Bearer <API_KEY>" \
>   -H "Accept: application/json"
> ```
>
> ### Example response
>
> ```json theme={null}
> {
>   "success": true,
>   "message": null,
>   "data": {
>     "exam_id": 12,
>     "registration_url": "https://app.indolat.com/link/aB3xZ"
>   }
> }
> ```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.