On this page

Users

Medplum supports the standard SCIM Users API endpoints.

Schemas​

SCIM resources include a schemas property that declares which schemas a resource conforms to.

The base User schema is urn:ietf:params:scim:schemas:core:2.0:User.

User Type and Username​

Medplum users always have a corresponding FHIR "profile" resource, which can be a Patient, Practitioner, or RelatedPerson. To specify the desired FHIR resource type, you must include a userType property with the FHIR resource type.

For example, consider this Practitioner:

{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "userType": "Practitioner",
  "name": {
    "givenName": "Alice",
    "familyName": "Smith"
  },
  "emails": [{ "value": "alice@example.com" }]
}

For example, consider this Patient:

{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "userType": "Patient",
  "name": {
    "givenName": "Bob",
    "familyName": "Jones"
  },
  "emails": [{ "value": "bob@example.com" }]
}

The SCIM userName property will be the system generated FHIR resource ID. This can be used in combination with the SCIM userType to identify the FHIR resource for the user.

Creating a Patient requires a patient access policy on the project: the Patient entry in Project.defaultAccessPolicies, or the deprecated Project.defaultPatientAccessPolicy when that entry is absent. The created membership receives that policy. SCIM returns an error when neither is set.

Create a user​

Create a user by making an HTTP POST request to https://api.medplum.com/scim/v2/Users

curl https://api.medplum.com/scim/v2/Users \
 -H "Authorization: Bearer MY_ACCESS_TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "userType": "Practitioner",
  "name": {
    "givenName": "Alice",
    "familyName": "Smith"
  },
  "userName": "alice@example.com",
  "emails": [
    {
      "value": "alice@example.com"
    }
  ]
}'

Read a user​

Read a user by making an HTTP GET request to https://api.medplum.com/scim/v2/Users/{id}

curl https://api.medplum.com/scim/v2/Users/MY_USER_ID \
 -H "Authorization: Bearer MY_ACCESS_TOKEN"

Update a user​

Update a user by making an HTTP PUT request to https://api.medplum.com/scim/v2/Users/{id}

curl -X PUT https://api.medplum.com/scim/v2/Users \
 -H "Authorization: Bearer MY_ACCESS_TOKEN" \
 -H "Content-Type: application/json" \
 -d '{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "userType": "Practitioner",
  "id": "41ecbf96-8296-4fac-801c-5e78042ba436",
  "name": {
    "givenName": "Alice",
    "familyName": "Smith"
  },
  "userName": "alice@example.com",
  "emails": [
    {
      "value": "alice@example.com"
    }
  ],
  "externalId": "test-external-id"
}'

Delete a user​

Delete a user by making an HTTP DELETE request to https://api.medplum.com/scim/v2/Users/{id}

curl -X DELETE https://api.medplum.com/scim/v2/Users/MY_USER_ID \
 -H "Authorization: Bearer MY_ACCESS_TOKEN"

Note that deleting the user does not delete any of the corresponding FHIR resources.

Search users​

Search for users by making an HTTP GET request to https://api.medplum.com/scim/v2/Users

curl https://api.medplum.com/scim/v2/Users \
 -H "Authorization: Bearer MY_ACCESS_TOKEN"