Skip to main content

Using Course Data

Full data format shift coming in v3.0

In the upcoming Paper version 3, course data is no longer exactly structured in the way outlined on this page. It's strongly recommended that if you're planning on developing with Paper, you should wait until version 3 and its documentation is released.

First, you'll need instructions and access to course data. Then, you can proceed.

All course data is stored in a series of quite large minified JSON files. One JSON file holds the latest plan data (around 2 MB - 3 MB), and each term (quarter) available to Paper has a JSON file with the term-specific schedule data (each around 3 MB - 4 MB). While schedule data files doesn't include all of the course data like the plan data file does, schedule data files tend to be larger since they can include paragraphs of descriptions provided by instructors.

There is currently no standalone conversion tool available to convert the JSON files into a more usable format. Instead, you'll need to use the tables below to understand the structure of these files.

You can see these conversions being made here in the Paper source code.

Plan data

The following are the keys of the root object of the plan data file.

  • courses - An array of all current courses.
  • legacy - An array of old courses that used to be included in the data from the registrar but no longer are. This is important in case a user has a plan that includes one of these courses back when it may have been offered.
  • majors - An object where the keys are the course subject names (ex. "COMP_SCI") and the values include the subject ID used by Paper serialization (ex. "027") (you'll need this if reading user plan data), the full name (ex. "Computer Science"), and the color theme used in Paper (ex. "blue").
  • major_ids - A object that maps subject IDs to subject names (ex. "027" to "COMP_SCI").
ShortLongType
coursescoursesPlanCourse[]
legacylegacyPlanCourse[]
majorssubjects{string to PlanSubject}*
major_idsmajor ids{string to string}*

* This property will be removed in Paper v3.

Schedule data

THe schedule data file consists of an array of ScheduleCourse.

Type Reference

Many properties in these types will not always exist. I highly recommend null checking every one.

PlanCourse

ShortLongType
iidstring
nnamestring
uunitsstring
rrepeatableboolean
ddescriptionstring
pprereqsstring
sdistribution areasDistrosString
ffoundational disciplinesDisciplinesString
lplaceholderboolean
ttermsstring[]

PlanSubject

ShortLongType
iidstring*
ccolorstring
ddisplaystring

* This property will be removed in Paper v3.

ScheduleCourse

ShortLongType
icourse idstring
cschoolstring
ttitlestring
usubjectstring
ncatalog numberstring
ssectionsScheduleSection[]

ScheduleSection

ShortLongType
isection idstring
rinstructorsSectionInstructor[]
ttitlestring
ktopicstring
usubjectstring
ncatalog numberstring
ssection numberstring
mmeeting days(MeetingDaysString | null)[]
xstart time(Time | null)[]
yend time(Time | null)[]
lroomstring[]
dstart datestring
eend datestring
ccomponentstring
acapacityint
qenrollment requirementsstring
pdescriptionsSectionDescription[]
odistribution areasDistrosString
ffoundational disciplinesDisciplinesString

SectionInstructor

ShortLongType
nnamestring
pphonestring
acampus addressstring
ooffice hoursstring
bbiostring
uurlstring

Time

ShortLongType
hhourint
mminuteint

DistrosString

A DistrosString is a normal string where each character represents a distribution area.

CharacterDistribution Area
1Natural Sciences
2Formal Studies
3Social and Behavioral Sciences
4Historical Studies
5Ethics and Values
6Literature and Fine Arts
7Interdisciplinary Studies

For example, the string "14" means both the Natural Studies and Historical Studies distribution areas are linked to the course.

DisciplinesString

A DisciplinesString is a normal string where each character represents a foundational discipline.

CharacterDistribution Area
1Natural Sciences
2Empirical and Deductive Reasoning
3Social and Behavioral Sciences
4Historical Studies
5Ethical and Evaluative Thinking
6Literature and Arts
7Interdisciplinary

For example, the string "14" means both the Natural Studies and Historical Studies foundational disciplines are linked to the course.

MeetingDaysString

A MeetingDaysString is a normal string where each character represents a day of the week.

CharacterDay of the Week
0Monday
1Tuesday
2Wednesday
3Thursday
4Friday

For example, the string "024" means the section includes a repeated meeting time on Monday, Wednesday, and Friday.

SectionDescription

A SectionDescription is an array of strings (string[]). The first element is the description title. The second element is the description value.

For example, a section may have the following SectionDescription[] value:

[
[
"Overview",
"This is an overview of this class. Blah blah blah words here words there and so on."
],
[
"Class Materials",
"You'll need this textbook and this calculator and this device and so on."
]
]