API · V1 · STATIC JSON

The receipts, machine-readable.

Every number LE TEEN publishes — the 30-year NPV for 500 U.S. colleges, lifetime ROI for 134 majors, the standing rankings — as plain JSON over GET. No key. No signup. No rate limit beyond CDN sanity. CORS open, so it works straight from a browser. Same computation as the pages, by construction: the API and the site can’t disagree.

Endpoints

EndpointWhat you get
/api/v1/index.json API root — endpoint list, license, DOI.
/api/v1/majors.json All 19 major categories + 115 subfields, full lifetime-ROI stat set.
/api/v1/majors/{slug}.json One major, same stats.
/api/v1/colleges.json The 500 largest-coverage schools that clear our gates: 30-year NPV, cost, earnings, break-even age.
/api/v1/colleges/{slug}.json One school.
/api/v1/rankings/out-of-state-penalty.json The out-of-state tuition penalty ranking, worst-first.
/api/v1/rankings/best-value.json Best-value colleges, top 15 per state, all 50 states + DC.
/api/v1/openapi.json OpenAPI 3.1 spec for all of the above.

Every payload carries a meta block — source, license, DOI, data vintage, build date. {slug} endpoints are one static file per major/school; the links above open a live example. The full machine description is the OpenAPI 3.1 spec.

Use it

curl

curl https://le-teen.com/api/v1/majors/registered-nursing.json

JavaScript

const res = await fetch('https://le-teen.com/api/v1/colleges.json');
const { colleges } = await res.json();
const worthIt = colleges.filter(c => c.npv_30yr_resident_usd > 1_000_000);

Python (stdlib only)

import json, urllib.request

url = "https://le-teen.com/api/v1/rankings/out-of-state-penalty.json"
with urllib.request.urlopen(url) as r:
    ranking = json.load(r)

worst = ranking["rankings"][0]
print(worst["institution"], worst["oos_penalty_30yr_npv_usd"])

What’s behind the numbers

FREOPP 2021 program-level earnings, IPEDS 2023 cost, BEA 2023 regional price parities — public data, named inline, same model as the calculator. Colleges appear only if they clear our editorial gates (real FREOPP earnings from at least 3 reported programs, hand-verified exclusions, and a positive 30-year NPV at resident pricing) — absence is a coverage statement, not a verdict. Read the methodology before you cite a number; it also lists the limitations we know about.

Want the raw spine instead of an API? The full dataset is DOI-registered: 10.5281/zenodo.21351602 · GitHub.

License & attribution

CC BY 4.0 — free to use, cache, republish, and build on. The ask is one line: cite LE TEEN, le-teen.com (and FREOPP / IPEDS / BEA as the upstream sources). For a stable reference, cite the DOI. Building something on this? Press and data questions: /press.

Cite this:

LE TEEN (2026). "College ROI API v1." Data: FREOPP 2021 · IPEDS 2023 · BEA 2023. https://le-teen.com/api