myProgress is an AI degree audit tool. Demo
Generates a comprehensive degree audit report by analyzing a student's transcript against specified program requirements. The endpoint uses AI to intelligently match courses to program blocks, determine fulfillment status, and provide detailed notes on remaining requirements.
- URL:
/audit - Method:
POST - Content-Type:
application/json - Response Format: JSON
The request body must be a JSON object with the following structure:
{
"program_titles": ["string"],
"courses": [
{
"subject_code": "string",
"course_code": "string",
"grade": "string",
"credit": integer
}
]
}program_titles (required, array of strings)
- List of program names to audit against
- Must match exact program names as they appear in the system
- Examples:
"Computer Science Major Concentration (B.A.)""Economics Major Concentration (B.A.)""Mathematics Major Concentration (B.A.)"
- Multiple programs can be audited in a single request
- Each program will generate a separate report in the response
courses (required, array of objects)
-
List of all courses the student has taken
-
Each course object contains:
subject_code(required, string)- Department or subject code (e.g.,
"COMP","MATH","ECON","PHYS","FRSL") - Typically 3-4 uppercase letters representing the department
course_code(required, string)- Course number as a string (must be numeric)
- Examples:
"206","133","350","227D1" - Can include suffixes like
"D1"or"D2"for multi-part courses - Must be convertible to an integer (validation error if not numeric)
grade(required, string)- Letter grade received
- Valid grades:
"A","A-","B+","B","B-","C+","C","F" - Failed courses (grade
"F") should havecreditset to0
credit(required, integer)- Number of credits earned for the course
- Must be
0for failed courses (grade"F") - Typically ranges from 1-6 credits per course
- Common values:
3,4,6
- Department or subject code (e.g.,
The response is a JSON object containing an array of program reports:
{
"reports": [
{
"name": "string",
"minimum_credit": integer | null,
"received_credit": integer | null,
"block_type": "PROGRAM" | "REQUIRED" | "COMPLEMENTARY" | "CUSTOM",
"status": "FULFILLED" | "UNFULFILLED",
"notes": ["string"],
"courses": [["string", "string", "string"]],
"blocks": [/* nested AgentBlockReport objects */]
}
]
}reports (array of objects)
- One report per program specified in
program_titles - Each report is a hierarchical
AgentBlockReportstructure - Reports are ordered to match the order of
program_titlesin the request
Report Object Structure:
Each report object represents a block of requirements and contains:
name (string)
- Name of the block
- Examples:
- Program level:
"Computer Science Major Concentration (B.A.)" - Required block:
"Required Courses" - Complementary block:
"Complementary Courses" - Custom block:
"Group A","Group B", etc.
- Program level:
minimum_credit (integer | null)
- Minimum credit requirements for this block
nullforCUSTOMblocks (credit requirements are specified in parent blocks)- Always present for
PROGRAM,REQUIRED, andCOMPLEMENTARYblocks
received_credit (integer | null)
- Total credits received/fulfilled for this block
- For
COMPLEMENTARYblocks, includes credits from nestedCUSTOMblocks nullforCUSTOMblocks (credits are counted at parent level)- Can be less than, equal to, or greater than
minimum_credit
block_type (string, enum)
- Type of requirement block
- Possible values:
"PROGRAM": Top-level program block (contains other blocks)"REQUIRED": Required courses block"COMPLEMENTARY": Complementary/elective courses block"CUSTOM": Custom sub-block within complementary courses (e.g., "Group A", "Group B")
status (string, enum)
- Fulfillment status of the block
- Possible values:
"FULFILLED": All requirements for this block are met"UNFULFILLED": Some requirements are still missing
notes (array of strings)
- Human-readable notes describing remaining requirements
- Empty array
[]if block isFULFILLED - Contains specific guidance when
UNFULFILLED - Examples:
"need 6 credits from MATH 389, MATH 240""need 3 more credits from Group A""need 9 credits from any MATH courses 300 level and above except MATH 389""Need (COMP 230 or COMP 350) and MATH 360"
- Notes avoid repetition across nested blocks
courses (array of tuples)
- List of courses fulfilling this block's requirements
- Each course is represented as
[subject_code, course_code, credit] - Example:
[["MATH", "223", "3"], ["COMP", "206", "4"]] - Empty array
[]forPROGRAMblocks (courses are assigned to nested blocks) - Courses are never reused across blocks (each course appears only once)
blocks (array of objects, optional)
- Nested blocks (recursive structure)
- Only
PROGRAMandCOMPLEMENTARYblocks contain nested blocks REQUIREDandCUSTOMblocks have emptyblocksarrays- Each nested block follows the same structure as the parent
The report structure follows a hierarchical model:
PROGRAM (top-level)
├── REQUIRED (required courses block)
│ └── courses: [list of required courses]
└── COMPLEMENTARY (complementary courses block)
├── courses: [courses not assigned to specific groups]
└── CUSTOM (sub-groups like "Group A", "Group B")
└── courses: [courses specific to this group]
Important Notes:
- A course can only fulfill one block (no course reuse)
- Courses are first assigned to
REQUIREDblocks, then toCOMPLEMENTARYblocks - Within
COMPLEMENTARYblocks, courses are assigned to specificCUSTOMblocks when applicable COMPLEMENTARYblock'sreceived_creditincludes credits from all nestedCUSTOMblocks
curl -X POST "http://localhost:8000/audit" \
-H "Content-Type: application/json" \
-d '{
"program_titles": [
"Computer Science Major Concentration (B.A.)",
"Economics Major Concentration (B.A.)"
],
"courses": [
{"subject_code": "COMP", "course_code": "206", "grade": "B+", "credit": 3},
{"subject_code": "MATH", "course_code": "133", "grade": "A", "credit": 3},
{"subject_code": "MATH", "course_code": "140", "grade": "A", "credit": 3},
{"subject_code": "PHYS", "course_code": "142", "grade": "A", "credit": 4},
{"subject_code": "COMP", "course_code": "360", "grade": "C+", "credit": 3},
{"subject_code": "MATH", "course_code": "204", "grade": "B-", "credit": 3},
{"subject_code": "ECON", "course_code": "332", "grade": "B+", "credit": 3},
{"subject_code": "ECON", "course_code": "333", "grade": "B+", "credit": 3},
{"subject_code": "MATH", "course_code": "314", "grade": "F", "credit": 0}
]
}'{
"reports": [
{
"name": "Computer Science Major Concentration (B.A.)",
"minimum_credit": 54,
"received_credit": 42,
"block_type": "PROGRAM",
"status": "UNFULFILLED",
"notes": ["overall need 12 more credits"],
"courses": [],
"blocks": [
{
"name": "Required Courses",
"minimum_credit": 36,
"received_credit": 30,
"block_type": "REQUIRED",
"status": "UNFULFILLED",
"notes": ["need 6 credits from COMP 250, COMP 251"],
"courses": [
["COMP", "206", "3"],
["COMP", "360", "3"],
["MATH", "133", "3"],
["MATH", "140", "3"],
["MATH", "204", "3"]
],
"blocks": []
},
{
"name": "Complementary Courses",
"minimum_credit": 18,
"received_credit": 12,
"block_type": "COMPLEMENTARY",
"status": "UNFULFILLED",
"notes": ["need 6 more credits from Group A"],
"courses": [
["PHYS", "142", "4"]
],
"blocks": [
{
"name": "Group A",
"minimum_credit": null,
"received_credit": null,
"block_type": "CUSTOM",
"status": "UNFULFILLED",
"notes": ["need 6 more credits"],
"courses": [],
"blocks": []
}
]
}
]
},
{
"name": "Economics Major Concentration (B.A.)",
"minimum_credit": 36,
"received_credit": 6,
"block_type": "PROGRAM",
"status": "UNFULFILLED",
"notes": ["overall need 30 more credits"],
"courses": [],
"blocks": [
{
"name": "Required Courses",
"minimum_credit": 18,
"received_credit": 0,
"block_type": "REQUIRED",
"status": "UNFULFILLED",
"notes": ["need all 18 credits from required courses"],
"courses": [],
"blocks": []
},
{
"name": "Complementary Courses",
"minimum_credit": 18,
"received_credit": 6,
"block_type": "COMPLEMENTARY",
"status": "UNFULFILLED",
"notes": ["need 12 more credits from 200-500 level ECON courses"],
"courses": [
["ECON", "332", "3"],
["ECON", "333", "3"]
],
"blocks": []
}
]
}
]
}400 Bad Request
- Invalid request format or validation errors
- Example: Non-numeric
course_code
{
"detail": "Invalid course_code 'ABC'. Course codes must be numeric."
}500 Internal Server Error
- Server-side errors during report generation
- Example: Program not found, AI processing failure
{
"detail": "Error generating audit report: [error message]"
}