API
The full collegedata.fyi corpus is exposed as a public, read-only PostgREST API at https://api.collegedata.fyi. Every page on this site is built from the same endpoints documented below.
Authentication
All requests require a Supabase anon key passed as both an apikey query parameter and an Authorization bearer header. The anon key is public and grants read-only access to the published views below.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImlzZHV3bXlndm1kb3pocHZ6YWl4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzYxMDk3NTksImV4cCI6MjA5MTY4NTc1OX0.fYZOIHyrOWzidgc-CVxWCY5Fe9pQk12-6YjDIS6y9qsResources
GET /rest/v1/cds_manifesttry it →One row per archived CDS document. Joins schools, source URLs, format detection, and extraction status.
school_idschool_namecanonical_yearsource_formatsource_urlstorage_pathextraction_statusdata_quality_flagGET /rest/v1/cds_artifactstry it →Extracted field values keyed by canonical CDS question number (e.g. B.101). The notes JSON column holds { values: { 'B.101': { value, value_decoded, question, section, ... } } }.
document_idkindproducernotescreated_atGET /rest/v1/cds_documentstry it →Raw archive table — one row per (school, sub-institution, year). Most consumers should prefer cds_manifest.
idschool_idcds_yeardetected_yearparticipation_statussource_sha256Examples
List the most recent year for every school
curl 'https://api.collegedata.fyi/rest/v1/cds_manifest?select=school_id,school_name,canonical_year&order=canonical_year.desc&limit=10' \
-H 'apikey: eyJhbGciOiJIUzI1NiIsInR5…' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5…'Fetch all archived years for one school
curl 'https://api.collegedata.fyi/rest/v1/cds_manifest?school_id=eq.harvard-university&select=canonical_year,source_format,extraction_status' \
-H 'apikey: <anon key>' \
-H 'Authorization: Bearer <anon key>'Fetch extracted field values for a document
The kind=eq.canonical filter selects the deterministic extractor output. To merge in the LLM fallback gap-fill, also fetch rows with producer=eq.tier4_llm_fallback and overlay the canonical values on top.
curl 'https://api.collegedata.fyi/rest/v1/cds_artifacts?document_id=eq.<uuid>&kind=eq.canonical&select=notes' \
-H 'apikey: <anon key>' \
-H 'Authorization: Bearer <anon key>'JavaScript client
The same @supabase/supabase-js client this site uses works against the public API:
import { createClient } from "@supabase/supabase-js";
const supabase = createClient(
"https://api.collegedata.fyi",
"<anon key>"
);
const { data } = await supabase
.from("cds_manifest")
.select("school_name, canonical_year")
.eq("extraction_status", "extracted")
.limit(20);Source documents
Original CDS files are hosted on Supabase Storage. Once you have a manifest row, build the public URL as https://api.collegedata.fyi/storage/v1/object/public/<storage_path>. Every file is content-addressed by SHA-256.
Schema and licensing
Field IDs follow the canonical 1,105-field schema derived from the CDS Initiative's 2025-26 XLSX template. The full schema is checked into the repo at schemas/. The dataset is MIT-licensed; the underlying CDS documents are owned by their respective institutions and reproduced here under their public-document status.