Update individual attributes for a group
Updates individual attributes for a group. To update a group's attributes, you must use the correct syntax for the operation, as defined in the SCIM specification(opens in a new tab or window).
The value
attribute of an operation on the members
path is an array of users, with each user represented as a value
attribute that corresponds to the user's Canva SCIM ID.
For example, to remove a particular user from the group and add two others, you could use a request body similar to the following:
{"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],"Operations": [{"op": "remove","path": "members[value eq \"UAFdxab1abC\"]"},{"op": "add","path": "members","value": [{"value": "UAFdxcd1cdE"},{"value": "UAFdxfg1fgH"}]}]}
Doing a replace
operation on the members
path replaces the entire member list in the group. Doing a replace
operation on the members
path should be done in a separate request from any other add
or remove
operations on group membership.
For add
or remove
operations, a maximum of 1000 group members are allowed in each value
array.
The members
array returned in a group's API response is always empty, even if there are members in the group. To see members of a group, you must use the Canva web interface(opens in a new tab or window).
HTTP method and URL path
https://www.canva.com /_scim /v2 /Groups/{canva_scim_id}
Header parameters
Content-Type
string
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
canva_scim_id
string
The Canva-generated SCIM ID for the group.
Body parameters
schemas
string[]
The URIs of the SCIM schemas.
Available values: The only valid value is urn:ietf:params:scim:api:messages:2.0:PatchOp
.
Operations
object[]
List of patch operations
Properties of Operations
op
string
The SCIM patch operation to perform.
Available values:
add
remove
replace
path
string
An attribute path describing the target of the operation. For more information, see the SCIM specification(opens in a new tab or window).
value
The value to add, remove, or replace.
Example request
Examples for using the /_scim/v2/Groups/{canva_scim_id}
endpoint:
curl --request PATCH 'https://www.canva.com/_scim/v2/Groups/{canva_scim_id}' \--header 'Authorization: Bearer {token}' \--header 'Content-Type: application/scim+json' \--data '{"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],"Operations": [{"op": "add","path": "members","value": [{"value": "UAFdxcd1cdE"}]}]}'
const fetch = require("node-fetch");fetch("https://www.canva.com/_scim/v2/Groups/{canva_scim_id}", {method: "PATCH",headers: {"Authorization": "Bearer {token}","Content-Type": "application/scim+json",},body: JSON.stringify({"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],"Operations": [{"op": "add","path": "members","value": [{"value": "UAFdxcd1cdE"}]}]}),}).then(async (response) => {const data = await response.json();console.log(data);}).catch(err => console.error(err));
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/Groups/{canva_scim_id}")).header("Authorization", "Bearer {token}").header("Content-Type", "application/scim+json").method("PATCH", HttpRequest.BodyPublishers.ofString("{\"schemas\": [\"urn:ietf:params:scim:api:messages:2.0:PatchOp\"], \"Operations\": [{\"op\": \"add\", \"path\": \"members\", \"value\": [{\"value\": \"UAFdxcd1cdE\"}]}]}")).build();HttpResponse<String> response = HttpClient.newHttpClient().send(request,HttpResponse.BodyHandlers.ofString());System.out.println(response.body());}}
import requestsheaders = {"Authorization": "Bearer {token}","Content-Type": "application/scim+json"}data = {"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],"Operations": [{"op": "add","path": "members","value": [{"value": "UAFdxcd1cdE"}]}]}response = requests.patch("https://www.canva.com/_scim/v2/Groups/{canva_scim_id}",headers=headers,json=data)print(response.json())
using System.Net.Http;var client = new HttpClient();var request = new HttpRequestMessage{Method = HttpMethod.Patch,RequestUri = new Uri("https://www.canva.com/_scim/v2/Groups/{canva_scim_id}"),Headers ={{ "Authorization", "Bearer {token}" },},Content = new StringContent("{\"schemas\": [\"urn:ietf:params:scim:api:messages:2.0:PatchOp\"], \"Operations\": [{\"op\": \"add\", \"path\": \"members\", \"value\": [{\"value\": \"UAFdxcd1cdE\"}]}]}",Encoding.UTF8,"application/scim+json"),};using (var response = await client.SendAsync(request)){response.EnsureSuccessStatusCode();var body = await response.Content.ReadAsStringAsync();Console.WriteLine(body);};
package mainimport ("fmt""io""net/http""strings")func main() {payload := strings.NewReader(`{"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],"Operations": [{"op": "add","path": "members","value": [{"value": "UAFdxcd1cdE"}]}]}`)url := "https://www.canva.com/_scim/v2/Groups/{canva_scim_id}"req, _ := http.NewRequest("PATCH", 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))}
$curl = curl_init();curl_setopt_array($curl, array(CURLOPT_URL => "https://www.canva.com/_scim/v2/Groups/{canva_scim_id}",CURLOPT_CUSTOMREQUEST => "PATCH",CURLOPT_RETURNTRANSFER => true,CURLOPT_HTTPHEADER => array('Authorization: Bearer {token}','Content-Type: application/scim+json',),CURLOPT_POSTFIELDS => json_encode(["schemas" => ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],"Operations" => [["op" => "add","path" => "members","value" => [["value" => "UAFdxcd1cdE"]]]]])));$response = curl_exec($curl);$err = curl_error($curl);curl_close($curl);if (empty($err)) {echo $response;} else {echo "Error: " . $err;}
require 'net/http'require 'uri'url = URI('https://www.canva.com/_scim/v2/Groups/{canva_scim_id}')http = Net::HTTP.new(url.host, url.port)http.use_ssl = truerequest = Net::HTTP::Patch.new(url)request['Authorization'] = 'Bearer {token}'request['Content-Type'] = 'application/scim+json'request.body = <<REQUEST_BODY{"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],"Operations": [{"op": "add","path": "members","value": [{"value": "UAFdxcd1cdE"}]}]}REQUEST_BODYresponse = http.request(request)puts response.read_body
Success response
If successful, the endpoint returns a 200
response with a JSON body with the following parameters:
schemas
string[]
Available values: The only valid value is urn:ietf:params:scim:schemas:core:2.0:Group
.
id
string
The Canva-generated SCIM ID for the group.
meta
object
Meta properties for the group.
Properties of meta
resourceType
string
The SCIM resource type of the object.
Available values: The only valid value is Group
.
created
string
The timestamp when the object was created.
displayName
string
The name of the group, suitable for display to end-users.
members
object[]
The members
array returned in a group's API response is always empty, even if there are members in the group. To see members of a group, you must use the Canva web interface(opens in a new tab or window).
Example response
{"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],"id": "UAFgrpb1abC","meta": {"resourceType": "Group","created": "2023-09-18T06:08:35Z"},"displayName": "White rabbits","members": []}
Error responses
404 Not found
schemas
string[]
Available values: The only valid value is urn:ietf:params:scim:api:messages:2.0:Error
.
detail
string
Available values: The only valid value is group {canva_scim_id} not found
.
status
string
The HTTP status code of the error.
Example error response
{"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],"detail": "group {canva_scim_id} not found","status": "404"}
409 Conflict
schemas
string[]
Available values: The only valid value is urn:ietf:params:scim:api:messages:2.0:Error
.
detail
string
Available values: The only valid value is Group with name {group_name} already exists.
.
status
string
The HTTP status code of the error.
Example error response
{"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],"detail": "Group with name White rabbits already exists.","status": "409"}