← Documentation
Text size
Innovation · License Commander

The Canva Engine

How License Commander manages Canva at university scale: seats added and removed through Canva’s official Admin API, a Watchlist that keeps the paid Canva-Employees team honest, and revokes that decide what happens to a person’s designs.

Last revised:

Canva seats are paid, and campus sign-in fills the paid team on its own. So License Commander does two jobs: it adds and removes seats reliably as orders come and go, and it watches the paid team every day, so anyone holding a seat without an order is asked to order, warned before removal, or removed quietly once they have already been told.

Canva is used across the university on two teams: Canva-Employees, where every seat is paid, and Canva-Students, which is free. When someone signs in with their campus login, single sign-on places them on a team: people with active student data on Canva-Students, everyone else on Canva-Employees.

That makes access easy, and it also means people land on the paid team without anyone ordering a license: staff trying Canva out, former students signing in after graduating, shared department mailboxes. Every one of them is a seat the university pays for.

Until late August 2026 the Engine drove a real web browser to manage the team, because Canva offered no membership API and blocked headless tools. When Canva released an Admin API for higher education that month, License Commander switched its provisioning over on August 26 and retired the browser robot that used to do the work. The effort that went into keeping a robot alive now goes into making every paid seat count.

By the numbers

0 browsers

adding and removing seats now runs on Canva’s official Admin API.

Verified

every removal is re-checked against the team before it counts as done.

3 days

on the paid team without an order, and current staff get the order email automatically.

1 email

per person, even when they show up on both teams.

7 days

between a former student’s one back-it-up notice and their removal.

Over 10

removals at once need the exact count typed in, not just a click.

From a browser robot to the Admin API

Same durable queue, no browser on the other end.

When a Canva order is approved, the platform still drops it on a durable queue, exactly as before. What drains the queue changed: instead of a browser on a desktop, a small cloud function calls Canva’s Admin API to add or remove the seat. Bulk removals from Canva-Students run through a separate lane of their own.

Every removal is checked. After Canva reports a seat gone, the function reads the team again and only marks the job done if the person really is off it. A safety net runs every 30 minutes and re-queues any approved order that never got its seat. And someone who already had a personal Canva account under their UCI email gets a short “sign in once” email, because that one sign-in is what links the account to UCI.

Each night the Engine also copies the real membership of Canva-Employees into a mirror inside License Commander, straight from the API, and Canva-Students, with its thousands of members, is mirrored weekly the same way. The Watchlist compares those mirrors with the orders on file.

Why it is clever

Keeping the queue made the switch safe. The approval side never knew a browser was on the other end, so the browser could be swapped for the API without touching how orders are placed. And a vendor’s “success” is no longer taken on faith: a removal that didn’t really happen is retried instead of being recorded as done.

✓ Toil removed signing a stuck browser robot back in by hand, and removals that looked done but weren’t.

The Watchlist

Who is on the paid team, who has paid, and where everyone else stands.

The Watchlist is the Canva view in the Command Center. It opens with an At a glance panel: how many people are on Canva-Employees, how many have an order on file, and where every unpaid person stands. Each unpaid person is counted in exactly one place: emailed and waiting for an order, a former student on the removal countdown, current staff with an automatic email scheduled, a shared account whose sponsor was emailed, a student club on hold, declined or lapsed, or a small “other” group.

Each row shows everything that applies to that person together: when they were emailed and their order-by date, whether their reminder went out, the day an automatic email is scheduled, whether they received a former-student notice and how many days are left, and whether they came back after a removal. A search box looks across every tab at once.

Why it is clever

Because every unpaid person sits in exactly one bucket, the buckets add up to the “not paid yet” number. Nobody falls between the lines, and nobody is counted twice.

✓ Toil removed piecing together who was emailed, who ordered, and who is still unpaid from separate lists.

Asking staff to order, automatically

Three days on the team, then a friendly email.

Current employees who have been on the paid team for three days without an order now get the staff email automatically, on weekday mornings. It explains that Canva isn’t free for faculty and staff, gives a 21-day order-by date and a button to order, and one reminder follows a week before the deadline. People who pass the deadline unpaid are listed for the licensing team, and removal still takes a person’s yes.

Each person gets one email, even if they show up on both teams. Shared department accounts are emailed to the person who sponsors the account, since a shared login could be anyone. Student club accounts are on hold while their move to Canva-Students is worked out, and the OIT licensing team itself is never emailed. Former students who have since joined the staff are emailed separately, in reviewed batches, with 14 days to order. If more than 30 people qualify for the automatic email in one day, the job sends nothing and asks a person to look first.

Why it is clever

The Watchlist shows the same rules the job uses, so each row says the day its email will go out before it goes. You can see what the automation will do, and the cap means a bad day of data sends nothing rather than everything.

✓ Toil removed selecting and sending each staff email by hand.

The queue that never lost an order now feeds Canva’s own API, and the Watchlist makes sure every paid seat has an order behind it, or a good reason why not.

Former students: a warning before removal

One notice, seven days, then quiet.

Campus sign-in sends anyone without active student data to the paid team, so a former student who logs in after graduating lands on a paid seat. Every four hours a job on a campus machine checks those people against the live campus directory. The first time someone qualifies, they get one notice: their UCI Canva access is ending, here is how to save their designs, a personal Canva account on a non-UCI email is an option, and they can reply if they are back at UCI. Seven days later the seat is removed.

If they sign in again after that, Canva re-adds them and the next run removes them quietly; they have already been told. The job removes nobody if the campus directory can’t be reached, and if more than 40 people qualify in one run, it removes nobody and asks a person to look.

Why it is clever

The check runs where the live campus directory can be reached, so a stale copy of someone’s record can’t get a current employee removed. Warning once and then acting quietly treats people fairly without turning cleanup into an email campaign.

✓ Toil removed removing former students by hand, and removing them without warning.

Declined and lapsed

A clear answer sticks.

Two more rules keep removals from turning into a loop. If someone tells us they don’t want Canva, Declined removes them from both teams at once, and they are never emailed again. If someone was emailed, missed their order-by date and was removed, they are marked Lapsed. Either way, if Canva re-adds them on a later sign-in, the daily job removes them again quietly, with no new email.

Removal doesn’t delete anyone’s work. A removed person’s designs go dark, and they come back if that person orders and rejoins with the same account. Any removal of more than 10 people at once asks for the exact number to be typed in, so a stray Select all can’t clear a page by accident.

Why it is clever

Without these rules, a removed person signs in, gets re-added, gets emailed again, and the cycle repeats. With them, a decision is made once and the system remembers it.

✓ Toil removed emailing the same person over and over, and big removals one misclick away.

Revoking with the designs in mind

Hand them off, let them save, or remove now.

In Canva, a person’s designs live inside their Canva account, so ending a license is also a decision about their work. When an administrator revokes a Canva license, a revoke screen asks what should happen and who approved it (the license’s fiscal officer by default). There are three choices: hand the designs to someone already on Canva-Employees, let the person save them first through a date the administrator picks (a week out by default, up to 60 days), or remove now after confirming nothing needs to be kept.

Only Canva’s admin console can move designs, so a handoff emails the administrator a one-minute console task with a “Mark handoff done” link. Until it is done, a hold keeps the person off the Watchlist and away from the cleanup job, and a reminder goes out every three days. Billing stops right away in every case. For now, Canva revokes and transfers by anyone other than an administrator go on a manual hold, and the person who tried gets an email explaining why and what to do next.

Why it is clever

Most licenses can end with a click. A Canva license holds someone’s work, so the screen makes that decision out loud, records who approved it, and protects the person from automatic removal until the handoff is finished.

✓ Toil removed designs lost because a license ended before anyone thought about them.

Renewals on each seat’s anniversary

No single renewal season, and no one keeping a calendar.

Canva seats renew on the anniversary of their first bill, not all at once. The Bursar’s Run tab lists the seats coming due each month, grouped by billing month and fiscal officer. One button emails each fiscal officer once, asking them to check the account on file, and that seat’s accounting stays editable for them through the end of the month. Kept seats bill on that month’s run, which starts their next year, and a revoked seat drops off on its own.

Why it is clever

Silence keeps the seat, so a busy fiscal officer doesn’t cost anyone their license by not replying, and nobody has to remember whose year is up.

✓ Toil removed tracking dozens of different renewal dates by hand.

Every paid seat, accounted for

A durable queue feeding Canva’s Admin API, removals that are verified, nightly and weekly mirrors of the real teams, a Watchlist that asks staff to order on its own and warns former students before removal, rules that make a decline or a missed deadline stick, a revoke screen that thinks about the designs, and renewals that arrive on each seat’s anniversary. Where Canva once offered no way in, License Commander built one. Now that Canva offers an API, the platform uses it, and spends its effort making sure every paid seat counts.