Free test APIs (reference)

All routes are prefixed with your API base (http://127.0.0.1:3001 by default). Grading / blueprint for attempts uses Redis {prefix}:free-test:{MongoId}:…; progress queues use the same user keys as paid tests ({prefix}:attempt:user:…).

Method Path Auth Notes
GET /api/public/free-tests None Directory (?limit/?skip). Each → thumbnail_url, block_thumbnails[]; use returned id with GET …/:id.
GET /api/public/free-tests/:id None Public sheet; blocks[].thumbnail_url preserved (Mongo Redis); strips answer secrets.
POST /api/public/free-tests/:id/start Bearer JWT Handshake; returns duration, name, server_time.
POST /api/public/free-tests/:id/progress/batch Bearer JWT Autosave snapshots (every 25s in this demo after Begin).
POST /api/public/free-tests/:id/attempt Bearer JWT Mongo submit + score (BullMQ when enabled; uses free Redis namespace).
GET /api/public/free-tests/:id/attempt/review Bearer JWT Per-question correctness + correct answer text.

0 · Free-test catalogue

Calls GET /api/public/free-tests (no JWT). Click a row to copy its id into the field below and run step 1 · Load sheet.

Sandbox

Serve via Express static: http://127.0.0.1:3001/free-test.html. “Load sheet” hits the public GET (no JWT). Authenticated endpoints need a Bearer token from /api/auth.

Resolved API: