Unlocking the Power of APIs: The SKY is the Limit!

This is a story about acknowledging how there isn’t one piece of software that can solve all your problems, which is why the extensibility of your systems is so important.

You just signed a multi-year contract for a new student information and learning management system (SIS/LMS) that does everything you want it to do. It provides the ultimate tool to bring all your school software into one system and allows everything to talk to each other. This is the dream. Naturally, it will take a lot of time, training, and labor to get it up and running, but once it is all configured, it will solve all your problems. Give yourself a pat on the back! You did it!

If this has been your experience when setting up and configuring any software, stop reading this post and email me ASAP what you are using. Because I want to know! If this hasn’t been your experience—which I imagine is true for many, if not all, of us—then keep reading.

One piece of software can’t solve all your problems.

You may realize a few days, weeks, months, or years into using your new SIS/LMS that it doesn’t do everything you want it to do. It doesn’t talk exactly how you thought it would with the different components in your tech stack. Or your needs have shifted, and it doesn’t offer all the features you and your school now require. But your teachers, students, and families are pleased with it, you signed that multi-year contract, and changing to a different SIS/LMS is basically as strenuous and labor intensive as building a new house by yourself (assuming you aren’t a contractor and, if you are, thanks for reading this very non-contractor-focused post).

Now what do you do? As a thought leader in your school—whether you are a director of technology, an assistant head of school, an academic dean, a database administrator, or something else—it is your job to ensure that you are choosing the right piece of school software to best fit the mission and needs of your school. This looks different from school to school and only you know what works best for your environment. But what you do know is that no matter the software, it needs to extend beyond the bounds of the box it came in (remember when software came in boxes?). What am I talking about?

  • Integrations
  • Partnerships
  • Add-ons
  • Connectors
  • Extensions
  • Learning tools
  • API endpoints

Each of these serves a different purpose and it is essential that your school software has some of these that are rock solid and can seamlessly become part your experience. When you can connect outside the bounds of your school software’s code to other software or technology, you can extend and enhance your capabilities. This extensibility is what we’re focusing on here today.

My API Journey

It was the summer of 2020, and I was sitting in my office as one of fewer than a dozen people on campus. There were a million scenarios and questions going through my head related to COVID-19, teaching remotely/hyflex/in person, reviewing assessment strategies, evaluating digital learning tools, maintaining student connection and community, etc. In addition to this, I was thinking about all the ways I could make things better and easier for teachers during what was about to be the hardest teaching year of their lives. Some things were obvious, but I knew it was the behind-the-scenes magic that could really make a difference. 

I went to school for music education and, up until this point, had a long-winding road learning how to write code in Google Apps Script. I’d never coded anything before diving into Google Apps Script a few years earlier. The goal was the same then as it is now: Use it to make something work better. As anyone without a programming background can attest, the two ways to get going are:

  1. Find documentation and getting-started resources somewhere online
  2. Search Stack Overflow and see how someone else did (some of) it

My journey utilized both strategies. I started out by doing something simple, not knowing what I was typing and copying and pasting, but learning by doing, breaking it until it worked, and eventually starting to comprehend how the string of characters made sense. Over the years, simple scripts took shape that developed into more complex scripts that became indispensable.

Back to that summer of 2020, I had a calendar script running that populated student and teacher Google calendars with their class schedules. It was built as a passion project that now could never be retired. Unfortunately, it was still fairly labor intensive on my end and immediately “stale.” The process required creating several Advanced Lists in Blackbaud SIS/LMS that detailed course lists and student enrollment and exporting them as a .csv file and importing them into my script. Next, the script would run over the course of a few days/weeks to populate everything. Of course, by the time everything was done populating, students had changed class sections, new courses had been created and dissolved, teachers had changed what they were teaching, and everybody’s calendar was wrong. This meant manually trying to keep track of and make changes one at a time hoping to keep up. It wasn’t great. What is better? “Stale” calendars or no calendars? “No calendars” wasn’t going to fly now that folks had seen the benefit of pre-populated calendars. I needed to find a better way.

Then the SKY opened…

Luckily, we had Blackbaud’s SIS/LMS and this is when I discovered Blackbaud’s SKY API, which had only recently been introduced for their education products. I had no idea what an API was and definitely didn’t know something called SKY API. Remember, music major over here. After reading a little about what it was (an application programming interface) and how it could extend our school software outside the box and connect to other things, I knew I needed to learn more. So, while I waited for all the COVID-19 hyflex tech hardware to come in the mail, I read every piece of SKY API documentation Blackbaud had to offer to understand how it worked. This meant learning how to use the UrlFetchApp on Apps Script, learning what a SKY Developer account was, trying to wrestle with something called a “bearer token,” and so much more. 

I was in over my head, to say the least, searching everywhere for small breadcrumbs that folks left in Blackbaud’s SKY Developer community and on Stack Overflow to see if I could piecemeal what I needed together. One post about fetching to open public APIs here, a video over there about creating an OAuth service—each little piece helped. Once I felt like I had most of the pieces in place, I still couldn’t break into the Blackbaud SKY API authorization despite hundreds of iterations of code. This was a new API for Blackbaud, so even they were still figuring out all the applications.*

Just when I was about to give up hope, I got a break. A tech team member from another school mentioned that they had successfully connected to SKY API using Google Apps Script! Magic, I tell you! I needed to know how to get past this final hurdle. Luckily, after a few COVID-19 Zoom phone calls and a bunch of trial and error, we got the “Success!” authorization screen! I got in! (Props to you if you get the Tron reference)

Endless Possibilities

It felt as though the possibilities were endless. I could now extend our SIS/LMS beyond the critical functionality it provides and connect it with other tools or systems. From that point on, it was just a matter of willpower to figure out how to hit the correct endpoints to check for enrollments in each section and automatically update the calendars with the correct rosters each night. Just like that, something that went from being “stale” and out of date transformed to “live” and always up to date. I had created a true automated sync simply by being able to tie into SKY API, allowing me to extend and enhance what we needed in our school environment.

If I can leave you with one thing, it is to highlight that this is an ongoing journey. Have I learned everything about coding in Apps Script and SKY API that I will ever learn? Absolutely not! There is a plethora of knowledge out there that I’ll be continuing to tap into and learn from whenever I need to. Whether it is researching what others have done, participating in bbdevdays, re-reading documentation a dozen times to only partially understand it, or reaching out to Blackbaud and others who I know I can count on to brainstorm ideas, this is not the end.

You can do it, too!

Keep in mind, my Master’s in Music Education did not include writing any code, yet I was still able to get to this point today and write this article to share my experience. How cool, right? If I can figure it out, you can too, and you’ll be glad you did! How? You can start by checking out this video of my presentation at bbdevdays last year.

Thanks for reading and I look forward to hearing from you soon!

*Blackbaud’s API resources have grown exponentially since Nick first started with SKY API in 2020. Our API team works in collaboration with our schools to identify technology partners that serve critical functions, including areas like medical data, security, communications, meeting schedules, calendars, and directories. We’ve also developed a OneRoster API and endpoints that students and parents can access via mobile apps. Blackbaud’s SKY Developer Community is also thriving because of innovators like Nick. Whether you’ve never written a line of code in your life or are an experienced developer, we would love to have you join us!