!!! Overview [{$pagename}] is a [SCIM Resource Operation] to UPDATE a [SCIM Resource]%%information Modifications to an existing [SCIM Resource] can be performed with either a [{$pagename}] or a [SCIM Replace Request]. %%!! Modifying with PATCH PATCH is __OPTIONAL__. PATCH enables [SCIM Clients] to send only those attributes requiring modification, reducing network and processing overhead. Attributes may be * deleted * replaced * merged * or added in a single request. The body of a PATCH request __MUST__ contain a partial [SCIM Resource] with the desired modifications. The [SCIM Service Provider] __MUST__ return either a [HTTP Status Code] 200 OK response code and the entire [SCIM Resource] (subject to the "attributes" query parameter - see Additional Retrieval Query Parameters) within the response body, or a 204 No Content [HTTP Status Code] and the appropriate response headers for a successful PATCH request. The server __MUST__ return a 200 OK [HTTP Status Code] if the "attributes" parameter is specified on the request. The [SCIM Service Provider] __MUST__ process a PATCH request by first removing any attributes specified in the meta.attributes Sub-Attribute (if present) and then merging the attributes in the PATCH request body into the [SCIM Resource]. The meta.attributes Sub-Attribute __MAY__ contain a list of attributes to be removed from the [SCIM Resource]. If the PATCH request body contains an attribute that is present in the meta.attributes list, the attribute on the [SCIM Resource] is replaced with the value from the [HTTP PATCH] body. If the attribute is complex the attribute name must be a path to a Sub-Attribute in standard attribute notation; e.g., name.givenName. Attributes that exist in the PATCH request body but not in the meta.attributes Sub-Attribute will be either be updated or added to the [SCIM Resource] according to the following rules. ! Singular attributes Singular attributes in the PATCH request body replace the attribute on the [SCIM Resource]. ! Complex attributes Complex Sub Attribute values in the [HTTP PATCH] request body are merged into the complex attribute on the [SCIM Resource]. ! Multi-valued attributes An attribute value in the [HTTP PATCH] request body is added to the value collection if the value does not exist and merged if a matching value is present. Values are matched by comparing the value Sub-Attribute from the PATCH request body to the value Sub-Attribute of the [SCIM Resource]. Attributes that do not have a value Sub-Attribute; e.g., addresses, or do not have unique value Sub-Attributes cannot be matched and must instead be deleted then added. Specific values can be removed from a [SCIM Resource] by adding an "operation" Sub-Attribute with the value "delete" to the attribute in the [HTTP PATCH] request body. As with adding/updating attribute value collections, the value to delete is determined by comparing the value Sub-Attribute from the PATCH request body to the value Sub-Attribute of the [SCIM Resource]. Attributes that do not have a value Sub-Attribute or that have a non-unique value Sub-Attribute are matched by comparing all Sub-Attribute values from the PATCH request body to the Sub-Attribute values of the [SCIM Resource]. A delete operation is ignored if the attribute's name is in the meta.attributes list. If the requested value to delete does not match a unique value on the [SCIM Resource] the server MAY return a [HTTP Status Code] 400 error. [{$pagename}] example shows how to add a member to a [SCIM Group]: %%prettify {{{ PATCH /Groups/acbf3ae7-8463-4692-b4fd-9b4da3f908ce Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "members": [ { "display": "Babs Jensen", "value": "2819c223-7f76-453a-919d-413861904646" } ] } }}} /% The "display" Sub-Attribute in this request is optional since the value attribute uniquely identifies the user to be added. If the user was already a member of this group, no changes should be made to the [SCIM Resource] and a success response should be returned. The [SCIM Service Provider] responds with either the entire updated [SCIM Group] or no response body: %%prettify {{{ HTTP/1.1 204 No Content Authorization: Bearer h480djs93hd8 ETag: W/"b431af54f0671a2" Location: "https://example.com/v1/Groups/acbf3ae7-8463-4692-b4fd-9b4da3f908ce" }}} /% The following example shows how to remove a member from a [SCIM Group]. As with the previous example, the "display" Sub-Attribute is optional. If the user was not a member of this [SCIM Group], no changes should be made to the Resource and a success response should be returned. %%information Note that [SCIM Service Provider] responses have been omitted for the rest of the [HTTP PATCH] examples. %% %%prettify {{{ PATCH /Groups/acbf3ae7-8463-4692-b4fd-9b4da3f908ce Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "members": [ { "display": "Babs Jensen", "value": "2819c223-7f76-453a-919d-413861904646" "operation": "delete" } ] } }}} /% The following example shows how to remove all members from a [SCIM Group]: %%prettify {{{ PATCH /Groups/acbf3ae7-8463-4692-b4fd-9b4da3f908ce Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "meta": { "attributes": [ "members" ] } } }}} /% The following example shows how to replace all of the members of a roup %%prettify {{{ PATCH /Groups/acbf3ae7-8463-4692-b4fd-9b4da3f908ce Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "meta": { "attributes": [ "members" ] }, "members": [ { "display": "Babs Jensen", "value": "2819c223-7f76-453a-919d-413861904646" }, { "display": "James Smith", "value": "08e1d05d-121c-4561-8b96-473d93df9210" } ] } }}} /% The following example shows how to add a member to and remove a member from a [SCIM Group] in a single request: %%prettify {{{ PATCH /Groups/acbf3ae7-8463-4692-b4fd-9b4da3f908ce Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "members": [ { "display": "Babs Jensen", "value": "2819c223-7f76-453a-919d-413861904646" "operation": "delete" }, { "display": "James Smith", "value": "08e1d05d-121c-4561-8b96-473d93df9210" } ] } }}} /% The following example shows how to change a User's primary email. If the User already has the email address, it is made the primary address and the current primary address (if present) is made non-primary. If the User does not already have the email address, it is added and made the primary address. %%prettify {{{ PATCH /Users/2819c223-7f76-453a-919d-413861904646 Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: "a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "emails": [ { "value": "bjensen@example.com", "primary": true } ] } }}} /% The following example shows how to change a User's address. Since address does not have a value Sub-Attribute, the existing address must be removed and the modified address added. %%prettify {{{ PATCH /Users/2819c223-7f76-453a-919d-413861904646 Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "addresses": [ { "type": "work", "streetAddress": "100 Universal City Plaza", "locality": "Hollywood", "region": "CA", "postalCode": "91608", "country": "US", "formatted": "100 Universal City Plaza\nHollywood, CA 91608 US", "primary": true "operation": "delete" }, { "type": "work", "streetAddress": "911 Universal City Plaza", "locality": "Hollywood", "region": "CA", "postalCode": "91608", "country": "US", "formatted": "911 Universal City Plaza\nHollywood, CA 91608 US", "primary": true } ] } }}} /% The following example shows how to change a User's nickname: %%prettify {{{ PATCH /Users/2819c223-7f76-453a-919d-413861904646 Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "nickName": "Barbie" } The following example shows how to remove a User's nickname: PATCH /Users/2819c223-7f76-453a-919d-413861904646 Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "meta": { "attributes": [ "nickName" ] } } }}} /% The following example shows how to change a User's familyName. This only updates the familyName and formatted on the "name" complex attribute. Any other name Sub-Attributes on the [SCIM Resource] remain unchanged. %%prettify {{{ PATCH /Users/2819c223-7f76-453a-919d-413861904646 Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "name": { "formatted": "Ms. Barbara J Jensen III", "familyName": "Jensen" } } }}} /%The following example shows how to remove a complex Sub-Attribute and an extended schema attribute from a User. %%prettify {{{ PATCH /Users/2819c223-7f76-453a-919d-413861904646 Host: example.com Accept: application/json Authorization: Bearer h480djs93hd8 ETag: W/"a330bc54f0671c9" { "schemas": ["urn:scim:schemas:core:1.0"], "meta": { "attributes": [ "name.formatted", "urn:hr:schemas:user:age" ] } } }}} /% !! More Information There might be more information for this subject on one of the following: [{ReferringPagesPlugin before='*' after='\n' }]