Skip to content
JEE Main & JEE Advanced datasets — Coming Soon

Data Schema

Complete reference for the PaperStack v4 JSON response schema.

Data Schema

All PaperStack API responses follow the v4 schema. This page documents every field across the response wrapper, question objects, and related data types.

PaperResponse (Top-Level Wrapper)

Every data endpoint returns a PaperResponse object with the following structure:

{
  "schema": "v4",
  "exam": "neet",
  "year": 2024,
  "shift": "05may-s1",
  "paper": null,
  "subjects": ["physics", "chemistry", "biology"],
  "total": 50,
  "duration": 200,
  "marksCorrect": 4,
  "marksIncorrect": -1,
  "marksUnanswered": 0,
  "sections": { "...": "..." },
  "scrapedAt": "2026-05-21T05:30:13.506Z",
  "answerKeyFound": true,
  "checksum": "59f420b3...",
  "provenance": { "...": "..." },
  "questions": ["..."]  ,
  "passages": []
}

Fields

FieldTypeRequiredDescription
schemastring✅Schema version (v4)
examstring✅Exam code: neet, jeemain, jeeadv
yearnumber✅Exam year (e.g. 2024)
shiftstring✅Shift in {dd}{mmm}-s{n} format (e.g. 05may-s1)
paperstring—Paper code. Usually null for single-paper exams
subjectsstring[]✅Subjects in this response
totalnumber✅Number of questions in this response
durationnumber✅Exam duration in minutes
marksCorrectnumber✅Marks per correct answer
marksIncorrectnumber✅Penalty per incorrect answer
marksUnanswerednumber✅Marks for unanswered questions (usually 0)
sectionsobject—Section configuration (see below)
scrapedAtstring—ISO 8601 timestamp of last scrape
answerKeyFoundboolean—Whether the official answer key was available
checksumstring—SHA-256 hex digest of this dataset
provenanceobject—Data origin metadata
questionsQuestion[]✅Array of question objects
passagesPassage[]—Array of comprehension passages

sections

{
  "a": {
    "label": "section a",
    "total": 100,
    "required": 100,
    "mandatory": true
  },
  "b": {
    "label": "section b",
    "total": 100,
    "required": 100,
    "mandatory": true
  }
}
FieldTypeDescription
labelstringSection display name
totalnumberTotal marks in this section
requirednumberMarks required to complete the section
mandatorybooleanWhether the section is mandatory

provenance

{
  "author": "Naman Dhakad",
  "repo": "https://github.com/rankify-ai/PaperStack",
  "license": "PolyForm-Shield License-1.0.0",
  "pipelineVersion": "1.0.0",
  "generatedAt": "2026-05-21T05:30:13.506Z"
}
FieldTypeDescription
authorstringCreator of the dataset
repostringSource repository URL
licensestringLicense identifier
pipelineVersionstringExtraction pipeline version
generatedAtstringISO 8601 generation timestamp

Question

Each question in the questions array has the following structure:

{
  "id": "neet-2024-05may-s1-ph-001",
  "number": 1,
  "numberLabel": null,
  "subject": "physics",
  "topic": "current-electricity",
  "section": "a",
  "type": "mcq",
  "text": "Question body with $\\LaTeX$ math...",
  "textHi": null,
  "options": ["Option A", "Option B", "Option C", "Option D"],
  "answer": "(3)",
  "answers": null,
  "answerPrecision": null,
  "marks": 4,
  "negativeMarks": -1,
  "passageId": null,
  "hasDiagram": false,
  "diagrams": null,
  "difficulty": null,
  "solution": null,
  "solutionFormat": null,
  "tags": ["battery", "internal-resistance"],
  "revision": 1,
  "source": "official-pdf",
  "confidence": null
}

Core Fields

FieldTypeRequiredDescription
idstring✅Globally unique ID in format {exam}-{year}-{shift}-{subject}-{number}
numbernumber✅Question number (1-based). Global in paper.json, 1..N in subject files
numberLabelstring—Optional label override for sub-parts
subjectstring✅physics, chemistry, biology, mathematics
topicstring✅Normalized topic from controlled vocabulary
sectionstring—Section identifier: a or b
typestring✅Question type (see below)
textstring✅Full question body. May contain $...$ LaTeX
textHistring—Hindi translation (if available)
marksnumber✅Marks awarded for correct answer
negativeMarksnumber✅Penalty for incorrect answer
hasDiagramboolean✅Whether this question references diagram images
tagsstring[]—Normalized topic tags for filtering
revisionnumber✅Revision counter, incremented on corrections
sourcestring✅official-pdf, answer-key, or reconstructed

Answer Fields

FieldTypeMCQMSQNATAssertion-Reason
answerstring"(3)""""9.301""(0)"-"(3)"
answersnumber[]null[1, 3]nullnull
answerPrecisionobjectnullnull{ type, min, max, unit }null
optionsstring[]3-5 options4-6 optionsnullnull

Answer format details:

TypeAnswer FormatExample
MCQZero-indexed index in parentheses"(2)" means the 3rd option (0-indexed)
MSQArray of zero-indexed indices in answers[1, 3] means options 2 and 4
NATNumeric string in answer"9.301"
Assertion-ReasonIndex in parentheses: "(0)" for A, "(1)" for B, etc."(2)"

Diagram Fields

FieldTypeDescription
hasDiagrambooleanWhether diagrams exist for this question
diagramsDiagram[]Array of diagram references (see below)
"diagrams": [
  {
    "file": "diagrams/q013-img-7.jpeg",
    "label": "fig. 1",
    "caption": null
  }
]
FieldTypeDescription
filestringRelative path to image within the paper's diagrams/ directory
labelstringDisplay label (e.g. fig. 1)
captionstringOptional diagram description

To fetch the image: GET /neet/{year}/{shift}/diagrams/{file} (requires auth).


Passage

Some questions belong to a comprehension passage. Passages are stored in a separate passages array at the top level:

{
  "id": "passage-1",
  "text": "Passage body text with $\\LaTeX$...",
  "textHi": null,
  "diagrams": null,
  "questions": ["neet-2024-05may-s1-ph-010", "neet-2024-05may-s1-ph-011"]
}

A question links to its passage via the passageId field.


Question Types

MCQ (Multiple Choice Question)

Single correct answer from 3–5 options.

{
  "type": "mcq",
  "options": ["1/10N", "1/100(N + 1)", "100N", "10(N + 1)"],
  "answer": "(2)",
  "answers": null,
  "answerPrecision": null,
  "negativeMarks": -1
}

MSQ (Multiple Select Question)

Multiple correct answers selected from 4–6 options.

{
  "type": "msq",
  "options": [
    "A-III, B-IV, C-I, D-II",
    "A-IV, B-I, C-III, D-II",
    "A-II, B-I, C-IV, D-III",
    "A-III, B-I, C-IV, D-II"
  ],
  "answer": "",
  "answers": [1, 3],
  "negativeMarks": -1
}

NAT (Numerical Answer Type)

A numeric value is required. No options provided.

{
  "type": "nat",
  "options": null,
  "answer": "9.301",
  "answers": null,
  "answerPrecision": {
    "type": "range",
    "min": 9.301,
    "max": 9.301,
    "unit": ""
  },
  "negativeMarks": 0
}

Assertion-Reason

Consists of an Assertion (A) and Reason (R). Answer selects the correct relationship.

{
  "type": "assertion-reason",
  "options": null,
  "answer": "(2)",
  "answers": null,
  "negativeMarks": -1
}

Answer mapping for assertion-reason:

AnswerMeaning
(0)Both A and R are true and R is the correct explanation of A
(1)Both A and R are true but R is NOT the correct explanation of A
(2)A is true but R is false
(3)A is false but R is true

Question ID Format

{exam}-{year}-{shift}-{subject-code}-{zero-padded-number}
ComponentDescriptionExample
examExam codeneet
year4-digit year2024
shiftFull shift name05may-s1
subject-codeTwo-letter abbreviationph, ch, bi, ma
numberZero-padded 3-digit number001

Subject codes: ph (physics), ch (chemistry), bi (biology), ma (mathematics)

Example: neet-2024-05may-s1-ph-001

Was this page helpful?

On this page