---
title: API overview
description: What the Quiz Tracker REST API covers, its base URL, and how to make your first request.
url: https://quiz-tracker.thally.app/api/introduction
---

# API overview

What the Quiz Tracker REST API covers, its base URL, and how to make your first request.

The Quiz Tracker API is a small JSON API with eight operations: one health
check, four for quizzes, and three for attempts. The web interface uses
exactly this API, so anything you can do in the browser you can do from a
script.

## Base URL

The reference uses a local instance:

```text
http://localhost:3000
```

Start one with the [Quickstart](/quickstart). The public demo at
`https://quiz-tracker-eight.vercel.app` serves the same API, but it is a
shared database, so use it for reads only.

> **Use the generated curl, not Send:**
  Each endpoint page shows a ready-to-run request. The **Try it** panel's
  **Send** button can't reach it: Thally's playground proxy refuses
  `localhost` and other private addresses with a `403` and the message
  "Private or unsafe targets are not allowed". Copy the curl command and
  run it in your terminal instead. The reference deliberately doesn't target
  the shared live demo, so test writes never land in a database other people use.

## Try your first request

#### Start Quiz Tracker locally

    Follow the [Quickstart](/quickstart) until `pnpm dev` is running.

#### Check health

    Open **Check health** in the Health group, or run
    `curl http://localhost:3000/api/health`. Expect `{"status":"ok"}`.

#### Create and grade a quiz

    Work through [Drive the API from a script](/guides/api) for the full
    create, submit and read flow with real responses.

## Conventions

- Request and response bodies are JSON. Send `Content-Type: application/json`.
- Request bodies are strict: unknown fields are rejected with `400`.
- Ids are opaque strings of 20 to 40 letters and digits.
- Timestamps are ISO 8601 strings in UTC.
- Every error is an `error` object with a `message`, a `code` and, for
  validation failures, `fieldErrors`. See [Errors](/guides/api#errors).