Skip to main content
Study plans define the curriculum structure for each grade level, specifying which subjects are taught, their weekly hours, and whether they are mandatory or elective.

Study Plans

A study plan links subjects from the subject catalog to specific grade levels for a school year, defining the hours and requirements for each subject.

List Study Plans

school_year_id
uuid
Filter by school year
grade_level
string
Filter by grade level (e.g., “9”, “10”, “11”)
id
uuid
Unique identifier for the study plan
school_id
uuid
ID of the school
school_year_id
uuid
ID of the school year this plan applies to
grade_level
string
Grade level (e.g., “9”, “10”, “11”, “12”)
subject_catalog_id
uuid
ID of the subject in the catalog
weekly_hours
float
Number of hours per week allocated to this subject
mandatory
boolean
Whether this subject is mandatory for students
status
string
Status: active or inactive
created_at
datetime
Creation timestamp
updated_at
datetime
Last update timestamp
curl -X GET "https://api.athena-erp.com/academic/study-plans?grade_level=10" \
  -H "Authorization: Bearer YOUR_TOKEN"
[
  {
    "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
    "school_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "school_year_id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
    "grade_level": "10",
    "subject_catalog_id": "c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f",
    "weekly_hours": 5.0,
    "mandatory": true,
    "status": "active",
    "created_at": "2024-01-10T09:00:00Z",
    "updated_at": "2024-01-10T09:00:00Z"
  },
  {
    "id": "d4e5f6a7-b8c9-4d0e-a1b2-c3d4e5f6a7b8",
    "school_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "school_year_id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
    "grade_level": "10",
    "subject_catalog_id": "e5f6a7b8-c9d0-4e1f-b2c3-d4e5f6a7b8c9",
    "weekly_hours": 4.0,
    "mandatory": true,
    "status": "active",
    "created_at": "2024-01-10T09:05:00Z",
    "updated_at": "2024-01-10T09:05:00Z"
  },
  {
    "id": "f6a7b8c9-d0e1-4f2a-c3d4-e5f6a7b8c9d0",
    "school_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "school_year_id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
    "grade_level": "10",
    "subject_catalog_id": "a7b8c9d0-e1f2-4a3b-d4e5-f6a7b8c9d0e1",
    "weekly_hours": 2.0,
    "mandatory": false,
    "status": "active",
    "created_at": "2024-01-10T09:10:00Z",
    "updated_at": "2024-01-10T09:10:00Z"
  }
]

Create Study Plan

school_year_id
uuid
required
ID of the school year
grade_level
string
required
Grade level this plan applies to
subject_catalog_id
uuid
required
ID of the subject from the subject catalog
weekly_hours
float
required
Number of hours per week for this subject (must be greater than 0)
mandatory
boolean
default:"true"
Whether this subject is mandatory for all students
status
string
default:"active"
Status: active or inactive
curl -X POST "https://api.athena-erp.com/academic/study-plans" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "school_year_id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
    "grade_level": "11",
    "subject_catalog_id": "c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f",
    "weekly_hours": 4.5,
    "mandatory": true,
    "status": "active"
  }'
{
  "id": "b8c9d0e1-f2a3-4b4c-e5f6-a7b8c9d0e1f2",
  "school_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "school_year_id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
  "grade_level": "11",
  "subject_catalog_id": "c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f",
  "weekly_hours": 4.5,
  "mandatory": true,
  "status": "active",
  "created_at": "2024-01-25T10:15:00Z",
  "updated_at": "2024-01-25T10:15:00Z"
}

Update Study Plan

study_plan_id
uuid
required
ID of the study plan to update
grade_level
string
New grade level
subject_catalog_id
uuid
New subject catalog ID
weekly_hours
float
New weekly hours allocation
mandatory
boolean
Whether the subject is mandatory
status
string
New status: active or inactive
curl -X PATCH "https://api.athena-erp.com/academic/study-plans/b8c9d0e1-f2a3-4b4c-e5f6-a7b8c9d0e1f2" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "weekly_hours": 5.0
  }'
{
  "id": "b8c9d0e1-f2a3-4b4c-e5f6-a7b8c9d0e1f2",
  "school_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "school_year_id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e",
  "grade_level": "11",
  "subject_catalog_id": "c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f",
  "weekly_hours": 5.0,
  "mandatory": true,
  "status": "active",
  "created_at": "2024-01-25T10:15:00Z",
  "updated_at": "2024-01-25T14:30:00Z"
}

Delete Study Plan

study_plan_id
uuid
required
ID of the study plan to delete
curl -X DELETE "https://api.athena-erp.com/academic/study-plans/b8c9d0e1-f2a3-4b4c-e5f6-a7b8c9d0e1f2" \
  -H "Authorization: Bearer YOUR_TOKEN"

Use Cases

Building a Complete Curriculum

Create a full curriculum for a grade level:
import requests

school_year_id = "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e"
grade_level = "10"

# Define the curriculum
curriculum = [
    {"subject_id": "math-uuid", "hours": 5.0, "mandatory": True},
    {"subject_id": "spanish-uuid", "hours": 4.0, "mandatory": True},
    {"subject_id": "english-uuid", "hours": 4.0, "mandatory": True},
    {"subject_id": "science-uuid", "hours": 5.0, "mandatory": True},
    {"subject_id": "history-uuid", "hours": 3.0, "mandatory": True},
    {"subject_id": "art-uuid", "hours": 2.0, "mandatory": False},
    {"subject_id": "music-uuid", "hours": 2.0, "mandatory": False},
]

# Create study plans for each subject
for subject in curriculum:
    response = requests.post(
        "https://api.athena-erp.com/academic/study-plans",
        headers={"Authorization": "Bearer YOUR_TOKEN"},
        json={
            "school_year_id": school_year_id,
            "grade_level": grade_level,
            "subject_catalog_id": subject["subject_id"],
            "weekly_hours": subject["hours"],
            "mandatory": subject["mandatory"],
            "status": "active"
        }
    )
    print(f"Created study plan: {response.json()['id']}")

Calculating Total Hours

Calculate total weekly hours for a grade level:
import requests

response = requests.get(
    "https://api.athena-erp.com/academic/study-plans",
    headers={"Authorization": "Bearer YOUR_TOKEN"},
    params={"grade_level": "10"}
)

study_plans = response.json()

# Calculate totals
total_hours = sum(plan["weekly_hours"] for plan in study_plans)
mandatory_hours = sum(
    plan["weekly_hours"] for plan in study_plans if plan["mandatory"]
)
elective_hours = sum(
    plan["weekly_hours"] for plan in study_plans if not plan["mandatory"]
)

print(f"Total weekly hours: {total_hours}")
print(f"Mandatory hours: {mandatory_hours}")
print(f"Elective hours: {elective_hours}")
print(f"Number of subjects: {len(study_plans)}")

Comparing Year-over-Year Changes

Compare study plans between school years:
import requests

def get_study_plan_summary(school_year_id, grade_level):
    response = requests.get(
        "https://api.athena-erp.com/academic/study-plans",
        headers={"Authorization": "Bearer YOUR_TOKEN"},
        params={
            "school_year_id": school_year_id,
            "grade_level": grade_level
        }
    )
    return response.json()

# Get plans for two different years
plans_2024 = get_study_plan_summary("year-2024-uuid", "10")
plans_2025 = get_study_plan_summary("year-2025-uuid", "10")

print(f"2024: {len(plans_2024)} subjects, {sum(p['weekly_hours'] for p in plans_2024)} hours")
print(f"2025: {len(plans_2025)} subjects, {sum(p['weekly_hours'] for p in plans_2025)} hours")

Relationship to Course Offerings

Study plans define the intended curriculum, while course offerings represent the actual implementation of those subjects for specific class groups. A study plan specifies that “Grade 10 should have 5 hours of Mathematics per week,” while a course offering implements “Mathematics for Grade 10A.”

Permissions

  • List study plans: Requires read:all or read:grades permission
  • Create/Update/Delete study plans: Requires write:all permission

Best Practices

  1. Plan before school year: Define study plans before the school year starts
  2. Validate total hours: Ensure total weekly hours don’t exceed available time
  3. Balance mandatory and elective: Provide flexibility with elective courses
  4. Version by year: Create new study plans for each school year to track curriculum changes
  5. Consider resources: Ensure you have teachers and facilities for all planned subjects

Build docs developers (and LLMs) love