> ## Documentation Index
> Fetch the complete documentation index at: https://developer.vclasses.net/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# List All PDF Quizzes — GET /api/v3/quiz/pdf-quizzes

> Retrieve a paginated list of all PDF quizzes, including question PDF metadata and student submission records for each quiz. Requires an admin Bearer token.

This endpoint returns a paginated list of all PDF quizzes on the platform, including each quiz's question PDF information and the complete list of student submissions associated with it.

## Endpoint

```
GET /api/v3/quiz/pdf-quizzes
```

## Required Role

**Admin** — you must authenticate with an admin-scoped Bearer token.

## Required Headers

| Header          | Value              |
| --------------- | ------------------ |
| `Authorization` | `Bearer <token>`   |
| `Accept`        | `application/json` |

## Query Parameters

<ParamField query="per_page" type="integer" default={15}>
  The maximum number of quiz records to return per page. Omit this parameter to use the default of 15.
</ParamField>

## Example Request

```bash theme={null}
curl -X GET "https://app.example.com/api/v3/quiz/pdf-quizzes?per_page=15" \
  -H "Authorization: Bearer your-token" \
  -H "Accept: application/json"
```

## Response

### 200 OK

```json theme={null}
{
  "data": [
    {
      "id": 1,
      "title": "Math Quiz PDF",
      "questions_pdf_url": "https://example.com/media/quiz-questions.pdf",
      "questions_count_of_quiz_pdf": 10,
      "total_grade_for_quiz_pdf": 100,
      "submissions": [
        {
          "id": 15,
          "student_name": "John Doe",
          "grade": 95,
          "total_grade": 100,
          "is_marked": 1,
          "pdf_answer_url": "https://example.com/media/answer-15.pdf"
        }
      ]
    }
  ],
  "links": {
    "first": "https://app.example.com/api/v3/quiz/pdf-quizzes?page=1",
    "last": "https://app.example.com/api/v3/quiz/pdf-quizzes?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "path": "https://app.example.com/api/v3/quiz/pdf-quizzes",
    "per_page": 15,
    "to": 1,
    "total": 1
  }
}
```

### Response Fields

<ResponseField name="data" type="array">
  An array of PDF quiz objects. Each object contains full quiz details and its associated student submissions.

  <Expandable title="Quiz object fields">
    <ResponseField name="id" type="integer">
      The unique identifier for the quiz.
    </ResponseField>

    <ResponseField name="title" type="string">
      The display title of the quiz.
    </ResponseField>

    <ResponseField name="questions_pdf_url" type="string | null">
      The URL to the uploaded PDF containing the quiz questions. Returns `null` if no PDF has been attached.
    </ResponseField>

    <ResponseField name="questions_count_of_quiz_pdf" type="integer | null">
      The number of questions in the quiz PDF. Returns `null` if not specified.
    </ResponseField>

    <ResponseField name="total_grade_for_quiz_pdf" type="float | null">
      The total grade achievable for this quiz. Returns `null` if not configured.
    </ResponseField>

    <ResponseField name="submissions" type="array">
      All student submission records for this quiz.

      <Expandable title="Submission fields">
        <ResponseField name="id" type="integer">
          The unique submission ID (also used as `grade_id` when grading this submission).
        </ResponseField>

        <ResponseField name="student_name" type="string">
          The full name of the student who submitted.
        </ResponseField>

        <ResponseField name="grade" type="numeric | null">
          The grade awarded to the student. Returns `null` if the submission has not yet been graded.
        </ResponseField>

        <ResponseField name="total_grade" type="numeric | null">
          The maximum possible grade for this submission. Returns `null` if not yet set.
        </ResponseField>

        <ResponseField name="is_marked" type="integer">
          Grading status flag. `1` indicates the submission has been graded; `0` indicates it is pending review.
        </ResponseField>

        <ResponseField name="pdf_answer_url" type="string | null">
          The URL to the student's uploaded answer PDF. Returns `null` if no file was submitted.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="meta" type="object">
  Pagination metadata for the response.

  <Expandable title="Meta fields">
    <ResponseField name="meta.total" type="integer">
      The total number of PDF quizzes across all pages.
    </ResponseField>

    <ResponseField name="meta.current_page" type="integer">
      The page number of the current response.
    </ResponseField>

    <ResponseField name="meta.last_page" type="integer">
      The page number of the final page of results.
    </ResponseField>

    <ResponseField name="meta.per_page" type="integer">
      The number of records returned per page.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="links" type="object">
  Cursor links for navigating between pages.

  <Expandable title="Links fields">
    <ResponseField name="links.next" type="string | null">
      The full URL to the next page of results. Returns `null` when you are on the last page.
    </ResponseField>
  </Expandable>
</ResponseField>

## Error Responses

| Status | Message             | Cause                                                   |
| ------ | ------------------- | ------------------------------------------------------- |
| `403`  | Unauthorized Access | The token provided does not belong to an admin account. |
