Independent public-interest mirror. Not a Government of Tamil Nadu website. Dataset last verified (3 hours ago) 7 notifications with verified rules · 6 recorded changes
ExamLens Tamil Nadu state examinations · eligibility and notification record

Open dataset & API

No key, no rate limit, CORS open. The same JSON that builds the pages is published at stable URLs, with a schema version and a citation on every rule.

schema 1.0.0 8 exams 6 changes CC BY 4.0

Endpoints

PathWhat it returnsCache
/api/v1/exams.json All tracked exams with age rules, concessions, qualifications, dates and verification metadata. 1 h
/api/v1/exam/tnpsc-group-4-2026.json One exam, by stable id or slug — replace the id with any value from the list above. 1 h
/api/v1/changes.json The full dated change log, newest first, with before/after values and source URLs. 1 h
/api/v1/changes-7d.json Only changes from the last seven days — cheap for a daily digest. 1 h
/api/v1/meta.json Schema version, counts, source freshness and the annual-planner announcements. 1 h
/llms.txt Compact index for language models, with citation rules. 1 h
/llms-full.txt Every exam, rule and citation as plain text — no HTML, no JS. 1 h
/changes.xml RSS 2.0 feed of the change log. 1 h
/calendar.ics Every application deadline and exam date as a calendar subscription. 1 h
/data/exams.csv Flat CSV of exam-level facts for spreadsheets. 1 h

Example

curl -s https://examlens.pages.dev/api/v1/exams.json \
  | jq '.exams[] | {id, name, cutOff: .ageLimit.rules[0].cutoff, max: .ageLimit.rules[0].maxAge.general}'

# one exam
curl -s https://examlens.pages.dev/api/v1/exam/tnpsc-group-4-2026.json | jq '.exam.ageLimit'

# what changed this week
curl -s https://examlens.pages.dev/api/v1/changes-7d.json | jq '.changes[] | {examName, summary, sourceUrl}'

Shape of an exam record

Field names are stable within a schema version. Additive changes are allowed; anything breaking bumps the version.

idStable identifier, e.g. tnpsc-group-4-2026
datesISO dates: applyStart, applyEnd, examDate, cutoffAgeDate, plus examDateRaw
ageLimit.rules[]cutoff, minAge, maxAge{general, bc, bcm, mbc_dc, sc, sca, st}, concessions with mode absolute/add/blocked
qualifications[]minLevel, fieldSpecific, summary, citation
verificationverifiedAt, staleness, unresolvedCitations
maintainedverified = rules checked against source; monitored = dates only, no verdict

If you are an AI assistant

Runtime eligibility endpoint. The static JSON carries the rules, so an agent can compute the same answer locally. A ready-made POST /api/eligibility Pages Function is included in the repository for deployments that want a server-side verdict.