I partially implemented SCIM. SCIM is used so rarely there’s no online discussion or help about any of it. Here’re a few things I learned.

1

In the return type for a paged result, the attribute Resources is initial caps. No other attribute names are initial caps.

2

The userName is case sensitive, and filtering on userName is case sensitive. But the SCIM userName is often mapped to email, and email is case insensitive. So if you’re assuming the userName is an email, you need to store it with it’s original case, otherwise integrations might get weird.

3

Here are four facts about fetching a user and users.

  • Fetching a single user returns a single User object.
  • Fetching a single user that cannot be found returns a 404.
  • Querying on users returns a List Response object, with the users in the Resources list.
  • Querying on users with a filter on username returns a single User object.

Pop Quiz:

Q. What is returned if you query on user with a filter on a username, for a user that doesn’t exist?

A. A List Response object with an empty Resources list.