Course Request API

I'm finding a gap where we don't have a file import or API to help manage course requests. When a student has requested a class, but then decides to enroll into a different one, the course request stays on the record. So when the student goes to look at the course request for the next term, they see all the past requests.

It would be great to have at least a GET and PATCH/DELETE. @Stephen Boyle, I wanted to tag you in case this is on your roadmap.

Thanks!

Comments

  • @Stephen Boyle thought I would tag you again in case you missed this. Is there anything on the roadmap for course requests?

    It would be great if there was a GET to see the course request made with a filter option on the status, dropped, enrolled, year and term.

    And an option to PATCH the specific request as changes are made.

    Thanks!


  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 Name Dropper Participant

    @Lindsey Bryant
    While this is a known gap for the API, I don't currently have course request endpoints in my near-term plans. If there is a specific endpoint or two that would solve a use case, then i have a better chance of fitting that in somewhere.

  • @Stephen Boyle thanks for setting expectations. a GET call to at least see all the course requests would be ideal. I have a SKY list right now, but to get that into our Data Warehouse, I have to create it under a specific user, create a PowerAutomate Job to run the list and save it to network drive, and then create an ETL job to pull the saved file into the Data Warehouse.

    Here is a screenshot of our SKY list. I would also need the User ID and Host ID included in the body:

    c83777bc8d1256d38f147924ea62972d-huge-im


  • @Lindsey Bryant you can probably get this information through an Advanced List, which may simplify the process of loading to your warehouse by using the ON API if you have access to it.

  • @Lauren Henderson
    Unfortunately the On API doesn't appear to have course requests. Thanks for the suggestion though. @Stephen Boyle the steps I outlined above we do for several areas. Do you know if there is a SKY API that would allow us to pull data down from a SKY List?

  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 Name Dropper Participant

    @Lindsey Bryant
    There is a technical limitation that prevent the API from running SKY Lists. So, unfortunately, they are not accessible via the API.

  • @Lindsey Bryant the ON API doesn't have specific published endpoints like the SKY API, but advanced lists can be pulled through a send HTTP request action in Microsoft Power Platform if you are subscribed to the ON API; I am not personally familiar with other ETL products or platforms but would think it could operate in a similar way.

  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 Name Dropper Participant

    @Lauren Henderson @Lindsey Bryant

    Note: There is a Power Platform connector that can connect to any SKY API including Education. It's the Blackbaud SKY Add-ins Connector. It doesn't have built-in support for the endpoints, so building the calls is by hand, but it handles the re-authorization issue. So, it isn't necessary to limit yourself to On API when using Power Automate.

  • @Lauren Henderson
    The SKY API has the same option to pull in an advance list. However, not all the data points are available in the Advanced List that are in the SKY List, hence the request for the API.

  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 Name Dropper Participant

    @Lindsey Bryant @Lauren Henderson

    The Course Request endpoint is live now. It is list of course request records for all students, but does not include enrollment status. I've got a separate item in the backlog for connecting the request to any enrollment it might have.

  • Nick Marchese
    Nick Marchese Community All-Star
    Seventh Anniversary Kudos 1 Name Dropper Participant

    @Stephen Boyle
    That's awesome. I think we'll use this too!

  • @Stephen Boyle Thank you! That is great news.

  • @Stephen Boyle

    Good morning! I looked at this API this morning and compared it to some of our data. It appears to be missing the Enrollment Status, which is helpful for us to determine if we need to shift classes around:

    5afa263b259c2666e203157cd9d42aed-huge-im

    It would also be great to have a “Requested Date”, as some of our classes are extremely limited and we leverage the date requested when it comes down priority.

    Some other additions that would be nice include since they are available in the SKY list:

    • Recommended By
    • Recommended Date
    • Requested By
    • Rejected By (user ID only)
    • Approved By (user ID only)
    • Alternatives
    • Fulfilled By Alternative
    • Class
  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 Name Dropper Participant

    @Lindsey Bryant
    Hi there! Some of those fields listed are in the output already, some we are still working on and some are likely part of future endpoints.

    Alternates are already listed, and enrollment status is upcoming work for us to evaluate and include if reasonable. I'll have the team look into the date and approved/rejected by at the same time. The recommendation information is not immediately planned as it is still in review.

    The object currently looks like this

    114c5ef2784936090fdb3208a3d0ad5f-huge-im

    Here is a sample of the output from a demo db:

    {
    "id": 26752878,
    "user": {
    "id": 4326571,
    "email": "abby@alex.com",
    "first_name": "Abby",
    "last_name": "Alex",
    "maiden_name": "",
    "middle_name": "",
    "preferred_name": "",
    "prefix": "",
    "suffix": ""
    },
    "course": {
    "id": 90859,
    "name": "20th Century Propaganda",
    "course_code": "5566",
    "description": "Since the end of the Cold War and the rise of the internet, propaganda has never been so active in our modern societies. Propaganda is a neutral term yet has acquired along the years a negative tone. Nevertheless, as a paradox, no organized human societies could function without propaganda. This course intends to provide students with an approach to Propaganda and Information/communication systems.",
    "length": 1,
    "credits": 0.0,
    "school_level": {
    "id": 453
    },
    "school_year": "2024 - 2025"
    },
    "start_term": {
    "id": 71985,
    "name": "1st Semester"
    },
    "preference": 2,
    "status": "Pending",
    "note": "",
    "alternates": [{
    "course": {
    "id": 94490,
    "name": "Advanced Thermodynamics",
    "course_code": "6987",
    "description": "This course is not for the faint of heart. It will use all of the concepts learned in BOTH Advanced Placement Physics and Calculus BC.",
    "length": 1,
    "credits": 0.0,
    "school_level": {
    "id": 453
    },
    "school_year": "2024 - 2025"
    },
    "start_term": {
    "id": 71985,
    "name": "1st Semester"
    },
    "preference": 1
    }]
    }

  • @Stephen Boyle
    Thanks! Looks like we don't have any of that data since it's our first year so I overlooked it. I appreciate you including a sample for me.

  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 Name Dropper Participant

    @Lindsey Bryant, @Lauren Henderson, @Nick Marchese

    The GET Academics course requests endpoint now has additional filters and fields.

    New filters
    - status - accepts: Pending, Approved, Denied
    - enrollment_status - accepts: NotEnrolled, Enrolled, Dropped

    New fields
    - request_date
    - requested_by
    - reviewer
    - enrollment_status
    - filled_by_alternate

    Also, see the ChangeLog.

  • @Stephen Boyle
    Thanks for the follow up! I'll go take a look at it this morning as we were just discussing how we're going to do course requests this year (which starts in about 2 weeks!).

  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 Name Dropper Participant

    @Lindsey Bryant

    BTW, there is a bug with the alternates array (it returns blank). It will be corrected in the 4/8 release.

  • @Stephen Boyle
    I wanted to check if the array bug was fixed on the alternatives. Also, do you know if the “Type” is on the list of fields to be included in the future?

    121f2205e0cab85dcdbe010c638bb23a-huge-im
  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 Name Dropper Participant

    @Lindsey Bryant
    The alternates issue was correct a in the 4/8 release. And I checked that alternates are returned for the demo db via the Try It Console. The type column indicates recommendations vs requests. All the records for this endpoints are request records. There will be a separate endpoint for recommendations. The type column also has a required state - I'll look into when that is assigned.

  • @Stephen Boyle we noticed today that the Course Request doesn't allow you to pull courses requests for future years (i.e. 2025-2026). Is that expected? We're doing course requests right now for next year, and it's a bit of an issue not being able to pull a future year.

  • Stephen Boyle
    Stephen Boyle Blackbaud Employee
    Tenth Anniversary Kudos 5 Name Dropper Participant

    @Lindsey Bryant
    Looks like there is a bug with the year filter. It is using ID instead of label (e.g. “2025-2026”). I'll get it updated to use either, but you can look up the ID for next year and pass that in for now.

  • @Stephen Boyle
    I was about to switch our ODS population to this API when I found what appears to be some inconsistencies with which term is returned when a course has multiple term offerings.

    For this student, we are returning this value:

    bdf0aa5fb9c2203f2c5a5b58f9f31b0a-huge-im

    However, the request is for the Fall Term:

    b633d538cefa317990e3a7d6f39078c0-huge-im

    I see this is still in Beta, is there anyway this can get fixed relatively quickly?

  • @Stephen Boyle and @Todd DeSchuiteneer I did submit a support case and included the link to this community post (Case Number 020414087).

  • Todd DeSchuiteneer
    Todd DeSchuiteneer Blackbaud Employee
    Tenth Anniversary Kudos 2 Name Dropper Participant

    Hi @Lindsey Bryant, thank you for that. I have let the agent know we are working to correct this and they will alert you once it's resolved. I apologize for the late reply.