Currently, I have about 500 manually created user accounts that do not have SIS ID's. I'm trying to figure out a way to add SIS ID's to these existing manual accounts through SIS imports. However, each SIS import does not update the existing account, it just creates a brand new account.
Here is an example of how it would look in Canvas.
MANUALLY CREATED ACCOUNT
NAME: JOHN DOE
SIS IMPORTED ACCOUNT
NAME: JOHN DOE
SIS ID: 1234567890
Is there a way to populate the SIS ID for over 500 manually created user accounts?
First off I want to thank everyone here for their suggestions on how to resolve this issue. Your feedback is greatly appreciated.
Yesterday, I had a chance to talk with my CSM. They stated that they have a script they can run that can populate all of these accounts with their SIS ID. All I need to do is send them a CSV file with the Canvas User ID along with the corresponding SIS ID.
If anyone out there is experiencing this issue, contact your CSM and they might be able to help you out.
You can use the user csv template like the one below...
The user_id is the sis id for Powerschool users it is Student_dcid#
|email@example.com||Joe||Doe||Joe Doe||Doe, Joe||Joe Doefirstname.lastname@example.org||active||FALSE|
Melissa, thank you for sharing but I tried doing that and it creates a separate account it does not update the account that already exists in Canvas.
Let me explain, here is an example image of a Canvas user account that was manually created in Canvas through the People tool.
Here are the details of this manually created user account if the image is hard to read.
FULL NAME: Jason Rodgers
DEFAULT EMAIL: email@example.com
CANVAS USER ID: 8664044
Notice that there is no SIS ID listed for this account. This is one example of over 500 manually created user accounts. The goal is to update all 500 user accounts with their correct SIS ID in the most efficient way possible.
Here is the screenshot of the CSV file that will be used for the SIS Import. The thought process is that this file will update the user account that already exists in Canvas.
Here are the key details of this CSV import if the image is hard to read
CANVAS USER ID: 8664044
(notice that this is the same Canvas User ID that matches the manually created user account.)
USER ID (SIS ID): 4441234576
FULL NAME: Chris Rodgers
The goal is to have the information listed in this CSV file update the existing Canvas user account (8664044)
SIS IMPORT RESULTS
Here is the result of the SIS import test. The CSV file did not update the existing user account (8664044). It created a brand new account. Which is not the result I was looking for.
Take note that if the CSV file had the exact same email address as the manually created user account, it would send an email to the faculty member asking them to merge accounts. This something I would like to avoid at all costs.
Ignore the account that has an Avatar. That is my original account.
Hopefully, this explanation made sense. Any advice on how to resolve this issue of adding SIS ID's to manually created user accounts is greatly appreciated.
You could probably update the SIS ID for these existing user accounts using REST... I know it's a user attribute that you can set/update using the REST API. If you're not already using REST for other things, this might be a challenge for you (my apologies for not offering any code sample), but something to consider. You'd need to loop through your users (you could hard code a list of Canvas IDs or use the API to find the user) and set each account's SIS ID attribute. If the SIS ID is assigned to another user, you'd get an error result.
Just tested it in REST and it's a no-go. Only the CREATE USER end point allows you to define an SIS ID attribute. The MODIFY USER end point does not. So apparently, you have to define an SIS ID at creation or not at all. Which is odd, because you can edit it directly in the Canvas administrator web interface.
EDIT2: The Canvas administrator web interface updates the user object's PSEUDONYM OBJECT which has a separate Canvas ID. The update is performed via POST to /users/[userID]/pseudonyms/[pseudonymID] with the parameters pseudonym[unique_id], pseudonym[sis_user_id], and pseudonym[integration_id] in the POST body and not in the URL itself.
I couldn't find any documentation in the REST API for finding or editing pseudonym objects.
What if he ran the SIS import to create user accounts with sis_ids then used the merge_into API to merge the accounts?
The merge_into API uses the Canvas user_id not sis_id to complete the merge. See: Users - Canvas LMS REST API Documentation > Merge Users
That would be a brilliant solution if it works! I haven't tried the merge user functionality yet, but it certainly looks like it would work! Thanks for that excellent suggestion.
I've used the REST API to edit the SIS ID for a user's login. The "edit a user login" path allows for that. Logins - Canvas LMS REST API Documentation
I don't understand why the SIS ID is per-login rather than per-user. In my testing, the SIS ID (`sis_user_id` in the API) has to be unique across all logins. If a user a has multiple logins -- say, one for canvas native authentication and one for SAML -- where are we supposed to put the actual SIS ID for (say) PowerSchool?
I can confirm that it is associated with the login, as one can see from the image attached.
Here we can see that the user has two sets of login information, one associated with the SIS ID: z6 and the login_id s6
and the other login_id: fram@localhost without a SIS_ID.
So there can be multiple login_id that each have a SIS_ID and that all concern a given user_id.
This is great to know. We hit this issue a few months back, however, not 500 so we just manually updated them! I definitely will keep this in mind going forward! Thanks for posting this question Chris.