> ## Documentation Index
> Fetch the complete documentation index at: https://www.canva.dev/docs/scim/llms.txt
> Use this file to discover all available pages before exploring further.
# Update all information for a user
Replaces an existing user's information.
You must provide all the information for the existing user, as if you're provisioning the user for the first time. This removes any existing information for the user that isn't provided.
If you only want to update a few of the user's attributes, you can use the [`PATCH` operation](/docs/scim/update-individual-attributes-user).
## HTTP method and URL path
PUT https\://www\.canva.com/\_scim/v2/Users/\{canva\_scim\_id}
## Header parameters
Provides credentials to authenticate the request, in the form of a `Bearer` token.
For example: `Authorization: Bearer {token}`
Indicates the media type of the information sent in the request. This must be set to `application/scim+json`.
For example: `Content-Type: application/scim+json`
## Path parameters
The Canva-generated SCIM ID for the user.
## Body parameters
The URIs of the SCIM schemas.
**Available values:** The only valid value is `urn:ietf:params:scim:schemas:core:2.0:User`.
A unique identifier for the user.
The email address for the user.
NOTE: The Canva SCIM API only supports one email address for each user.
Properties of emails>} defaultExpanded={true}>
Whether the email is the primary address. Only one email address for a user can be the primary one.
The email address.
The type of email address for the user. The Canva SCIM API only supports `work` as the type of the email address.
**Available values:** The only valid value is `work`.
A string that is an identifier for the resource as defined by the provisioning client.
The name of the user, suitable for display to end-users.
The components of the user's name.
Properties of name>} defaultExpanded={true}>
The first or 'given' name for the user.
The last or 'family' name for the user.
The user's default location, for example `en_AU`.
The role of the user.
If an invalid value is provided, the role defaults to `Member`.
NOTE: Except for `Member`, all other role values map to the Canva "Brand Designer" role. For more information on Canva roles, see [Team roles and permissions](https://www.canva.com/help/roles-and-permissions/).
**Default value:** `Member`
**Available values:**
* `Member`
* `Teacher`
* `Staff`
* `Admin`
* `Template-designer`
* `Aide`
* `Administrator`
* `School administrator`
* `School`
* `Tenant`
* `Faculty`
Whether the user account is active. Setting this to `false` deprovisions the user in Canva.
## Example request
Examples for using the `/_scim/v2/Users/{canva_scim_id}` endpoint:
```sh
curl --request PUT 'https://www.canva.com/_scim/v2/Users/{canva_scim_id}' \
--header 'Authorization: Bearer {token}' \
--header 'Content-Type: application/scim+json' \
--data '{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"externalId": "{idp_provided_external_id}",
"userName": "aliddell",
"displayName": "Alice Liddell",
"name": {
"givenName": "Alice",
"familyName": "Liddell"
},
"emails": [
{
"primary": true,
"value": "alice@acme.com",
"type": "work"
}
],
"locale": "en_US",
"role": "Member"
}'
```
```js
const fetch = require("node-fetch");
fetch("https://www.canva.com/_scim/v2/Users/{canva_scim_id}", {
method: "PUT",
headers: {
"Authorization": "Bearer {token}",
"Content-Type": "application/scim+json",
},
body: JSON.stringify({
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"externalId": "{idp_provided_external_id}",
"userName": "aliddell",
"displayName": "Alice Liddell",
"name": {
"givenName": "Alice",
"familyName": "Liddell"
},
"emails": [
{
"primary": true,
"value": "alice@acme.com",
"type": "work"
}
],
"locale": "en_US",
"role": "Member"
}),
})
.then(async (response) => {
const data = await response.json();
console.log(data);
})
.catch(err => console.error(err));
```
```java
import java.io.IOException;
import java.net.URI;
import java.net.http.*;
public class ApiExample {
public static void main(String[] args) throws IOException, InterruptedException {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.canva.com/_scim/v2/Users/{canva_scim_id}"))
.header("Authorization", "Bearer {token}")
.header("Content-Type", "application/scim+json")
.method("PUT", HttpRequest.BodyPublishers.ofString("{\"schemas\": [\"urn:ietf:params:scim:schemas:core:2.0:User\"], \"externalId\": \"{idp_provided_external_id}\", \"userName\": \"aliddell\", \"displayName\": \"Alice Liddell\", \"name\": {\"givenName\": \"Alice\", \"familyName\": \"Liddell\"}, \"emails\": [{\"primary\": true, \"value\": \"alice@acme.com\", \"type\": \"work\"}], \"locale\": \"en_US\", \"role\": \"Member\"}"))
.build();
HttpResponse response = HttpClient.newHttpClient().send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
```
```py
import requests
headers = {
"Authorization": "Bearer {token}",
"Content-Type": "application/scim+json"
}
data = {
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"externalId": "{idp_provided_external_id}",
"userName": "aliddell",
"displayName": "Alice Liddell",
"name": {
"givenName": "Alice",
"familyName": "Liddell"
},
"emails": [
{
"primary": True,
"value": "alice@acme.com",
"type": "work"
}
],
"locale": "en_US",
"role": "Member"
}
response = requests.put("https://www.canva.com/_scim/v2/Users/{canva_scim_id}",
headers=headers,
json=data
)
print(response.json())
```
```csharp
using System.Net.Http;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Put,
RequestUri = new Uri("https://www.canva.com/_scim/v2/Users/{canva_scim_id}"),
Headers =
{
{ "Authorization", "Bearer {token}" },
},
Content = new StringContent(
"{\"schemas\": [\"urn:ietf:params:scim:schemas:core:2.0:User\"], \"externalId\": \"{idp_provided_external_id}\", \"userName\": \"aliddell\", \"displayName\": \"Alice Liddell\", \"name\": {\"givenName\": \"Alice\", \"familyName\": \"Liddell\"}, \"emails\": [{\"primary\": true, \"value\": \"alice@acme.com\", \"type\": \"work\"}], \"locale\": \"en_US\", \"role\": \"Member\"}",
Encoding.UTF8,
"application/scim+json"
),
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
};
```
```go
package main
import (
"fmt"
"io"
"net/http"
"strings"
)
func main() {
payload := strings.NewReader(`{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"externalId": "{idp_provided_external_id}",
"userName": "aliddell",
"displayName": "Alice Liddell",
"name": {
"givenName": "Alice",
"familyName": "Liddell"
},
"emails": [
{
"primary": true,
"value": "alice@acme.com",
"type": "work"
}
],
"locale": "en_US",
"role": "Member"
}`)
url := "https://www.canva.com/_scim/v2/Users/{canva_scim_id}"
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer {token}")
req.Header.Add("Content-Type", "application/scim+json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
```
```php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://www.canva.com/_scim/v2/Users/{canva_scim_id}",
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer {token}',
'Content-Type: application/scim+json',
),
CURLOPT_POSTFIELDS => json_encode([
"schemas" => [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"externalId" => "{idp_provided_external_id}",
"userName" => "aliddell",
"displayName" => "Alice Liddell",
"name" => [
"givenName" => "Alice",
"familyName" => "Liddell"
],
"emails" => [
[
"primary" => true,
"value" => "alice@acme.com",
"type" => "work"
]
],
"locale" => "en_US",
"role" => "Member"
])
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if (empty($err)) {
echo $response;
} else {
echo "Error: " . $err;
}
```
```ruby
require 'net/http'
require 'uri'
url = URI('https://www.canva.com/_scim/v2/Users/{canva_scim_id}')
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request['Authorization'] = 'Bearer {token}'
request['Content-Type'] = 'application/scim+json'
request.body = <
## Success response
If successful, the endpoint returns a `200` response with a JSON body with the following parameters:
The URIs of the SCIM schemas.
**Available values:** The only valid value is `urn:ietf:params:scim:schemas:core:2.0:User`.
The Canva-generated SCIM ID for the user.
Meta properties for the user.
Properties of meta>} defaultExpanded={true}>
The SCIM resource type of the object.
**Available values:** The only valid value is `User`.
The timestamp when the object was created.
A unique identifier for the user.
The name of the user, suitable for display to end-users.
The email address for the user.
NOTE: The Canva SCIM API only supports one email address for each user.
Properties of emails>} defaultExpanded={true}>
Whether the email is the primary address. Only one email address for a user can be the primary one.
The email address.
The type of email address for the user. The Canva SCIM API only supports `work` as the type of the email address.
**Available values:** The only valid value is `work`.
Whether the user account is active. Setting this to `false` deprovisions the user in Canva.
The role of the user.
If an invalid value is provided, the role defaults to `Member`.
NOTE: Except for `Member`, all other role values map to the Canva "Brand Designer" role. For more information on Canva roles, see [Team roles and permissions](https://www.canva.com/help/roles-and-permissions/).
**Default value:** `Member`
**Available values:**
* `Member`
* `Teacher`
* `Staff`
* `Admin`
* `Template-designer`
* `Aide`
* `Administrator`
* `School administrator`
* `School`
* `Tenant`
* `Faculty`
A string that is an identifier for the resource as defined by the provisioning client.
The components of the user's name.
Properties of name>} defaultExpanded={true}>
The first or 'given' name for the user.
The last or 'family' name for the user.
The user's default location, for example `en_AU`.
## Example response
```json
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"id": "UAFdxab1abC",
"externalId": "abcd1234",
"meta": {
"resourceType": "User",
"created": "2023-09-18T06:08:35Z"
},
"userName": "aliddell",
"displayName": "Alice Liddell",
"name": {
"givenName": "Alice",
"familyName": "Liddell"
},
"emails": [
{
"primary": true,
"value": "alice@acme.com",
"type": "work"
}
],
"active": true,
"locale": "en_US",
"role": "Member"
}
```
## Error responses
### 400 Bad request
**Available values:** The only valid value is `urn:ietf:params:scim:api:messages:2.0:Error`.
**Available values:** The only valid value is `No SSO configurations found, please check the settings page`.
The HTTP status code of the error.
#### Example error response
```json
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"detail": "No SSO configurations found, please check the settings page",
"status": "400"
}
```
### 403 Forbidden
**Available values:** The only valid value is `urn:ietf:params:scim:api:messages:2.0:Error`.
**Available values:** The only valid value is `Email domain not authorized for SCIM.`.
The HTTP status code of the error.
#### Example error response
```json
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"detail": "Email domain not authorized for SCIM.",
"status": "403"
}
```
### 404 Not found
**Available values:** The only valid value is `urn:ietf:params:scim:api:messages:2.0:Error`.
**Available values:** The only valid value is `No user found for id {canva_scim_id}`.
The HTTP status code of the error.
#### Example error response
```json
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"detail": "No user found for id {canva_scim_id}",
"status": "404"
}
```
### 409 Conflict
**Available values:** The only valid value is `urn:ietf:params:scim:api:messages:2.0:Error`.
**Available values:**
* `userName not available`
* `Account with email can not be updated. User needs to accept SSO linking`
* `Account with email already exists. User must first log in with SAML to confirm account ownership`
* `Account with email is soft deleted. The user must first log in to reactivate their account`
The HTTP status code of the error.
#### Example error response
```json
{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"detail": "userName not available",
"status": "409"
}
```