API Endpoints

Detailed reference for all PaperStack API endpoints.

API Endpoints

PaperStack exposes a RESTful API organized by exam, year, shift, and file.

Public Endpoints (No Auth Required)

These endpoints do not require authentication and return metadata about available data.

List Exam Years

Returns all available years for a given exam.

GET /{exam}

Example:

curl https://api.paperstack.qzz.io/neet

Response:

{
  "exam": "neet",
  "label": "NEET",
  "years": [2024, 2023, 2022, 2021, 2020],
  "totalYears": 5
}

List Shifts for a Year

Returns available shifts and subjects for a given exam and year.

GET /{exam}/{year}

Example:

curl https://api.paperstack.qzz.io/neet/2024

Response:

{
  "exam": "neet",
  "year": 2024,
  "shifts": [
    {
      "shift": "2024-05-05-s1",
      "subjects": ["physics", "chemistry", "biology"],
      "total": 200,
      "lastUpdated": "2025-12-01",
      "checksum": "a1b2c3d4"
    }
  ]
}

Protected Endpoints (Auth Required)

These endpoints require a valid API key in the Authorization header.

Fetch Question Data

Retrieves questions for a specific exam, year, shift, and subject file.

GET /{exam}/{year}/{shift}/{file}

Headers:

HeaderRequiredValue
AuthorizationYesBearer ps_xxxxx

Path Parameters:

ParamDescriptionExample
examExam codeneet, jeemain
year4-digit year2024
shiftShift name or shorthand2024-05-05-s1, s1
fileSubject JSON filephysics.json, chemistry.json

File Options:

FileDescription
physics.jsonPhysics questions
chemistry.jsonChemistry questions
biology.jsonBiology questions (NEET only)
mathematics.jsonMathematics questions (JEE only)

Example:

curl -H "Authorization: Bearer ps_xxxxx" \
  https://api.paperstack.qzz.io/neet/2024/s1/physics.json

Response:

{
  "exam": "neet",
  "year": 2024,
  "shift": "2024-05-05-s1",
  "subject": "physics",
  "total": 50,
  "questions": [
    {
      "id": "N2405P001",
      "type": "mcq",
      "question": "A particle moves in a circle of radius R with constant speed v. The acceleration of the particle is:",
      "options": [
        { "key": "A", "value": "v²/R towards the centre" },
        { "key": "B", "value": "v²/R away from the centre" },
        { "key": "C", "value": "v/R towards the centre" },
        { "key": "D", "value": "v/R away from the centre" }
      ],
      "answer": "A",
      "topic": "Circular Motion",
      "difficulty": "easy",
      "hasDiagram": false,
      "diagrams": []
    }
    // ... more questions
  ],
  "metadata": {
    "examDate": "2024-05-05",
    "totalQuestions": 50,
    "lastUpdated": "2025-12-01T10:00:00Z",
    "checksum": "a1b2c3d4"
  }
}

Fetch Question Diagrams

If a question has associated diagrams, they are available at:

GET /{exam}/{year}/{shift}/diagrams/{filename}

Example:

curl -H "Authorization: Bearer ps_xxxxx" \
  https://api.paperstack.qzz.io/neet/2024/s1/diagrams/N2405P001.png

Note: Diagrams include the question ID in their filename for easy cross-referencing.

Shift Resolution

PaperStack supports smart shift resolution. You can use shorthand or partial shift names:

InputResolves To
s1First chronological shift
s2Second chronological shift (if available)
2024-05-05-s1Exact shift name
05mayFirst shift starting with 05may

This makes it easy to reference shifts without remembering exact naming conventions.

On this page