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 .
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"
}
]
}
]
}
HTTP method and URL path
PATCH https://www.canva.com /_scim /v2 /Groups/{canva_scim_id}
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 group.
Body parameters
The URIs of the SCIM schemas. The value for this can only be urn:ietf:params:scim:api:messages:2.0:PatchOp
.
List of patch operations
Properties of Operations
The SCIM patch operation to perform. This can be one of the following:
An attribute path describing the target of the operation. For more information, see the SCIM specification .
The value to add, remove, or replace.
Example request
Examples for using the /_scim/v2/Groups/{canva_scim_id}
endpoint:
cURL Node.js Java Python C# Go PHP Ruby
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 requests
headers = {
"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 main
import (
"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 = true
request = 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_BODY
response = 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:
The value for this can only be urn:ietf:params:scim:schemas:core:2.0:Group
.
The Canva-generated SCIM ID for the group.
The name of the group, suitable for display to end-users.
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
The value for this can only be urn:ietf:params:scim:api:messages:2.0:Error
.
The value for this can only be group {canva_scim_id} not found
.
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
The value for this can only be urn:ietf:params:scim:api:messages:2.0:Error
.
The value for this can only be Group with name {group_name} already exists.
.
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"
}