curl --request PUT \
--url https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/scim+json' \
--data '
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:plerion:scim:schemas:extension:2.0:User"
],
"userName": "<string>",
"externalId": "<string>",
"name": {
"formatted": "<string>",
"givenName": "<string>",
"familyName": "<string>"
},
"displayName": "<string>",
"emails": [
{
"value": "<string>",
"type": "<string>",
"primary": true
}
],
"active": true,
"urn:plerion:scim:schemas:extension:2.0:User": {
"ssoUser": true
}
}
'import requests
url = "https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}"
payload = {
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User", "urn:plerion:scim:schemas:extension:2.0:User"],
"userName": "<string>",
"externalId": "<string>",
"name": {
"formatted": "<string>",
"givenName": "<string>",
"familyName": "<string>"
},
"displayName": "<string>",
"emails": [
{
"value": "<string>",
"type": "<string>",
"primary": True
}
],
"active": True,
"urn:plerion:scim:schemas:extension:2.0:User": { "ssoUser": True }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/scim+json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/scim+json'},
body: JSON.stringify({
schemas: [
'urn:ietf:params:scim:schemas:core:2.0:User',
'urn:plerion:scim:schemas:extension:2.0:User'
],
userName: '<string>',
externalId: '<string>',
name: {formatted: '<string>', givenName: '<string>', familyName: '<string>'},
displayName: '<string>',
emails: [{value: '<string>', type: '<string>', primary: true}],
active: true,
'urn:plerion:scim:schemas:extension:2.0:User': {ssoUser: true}
})
};
fetch('https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'schemas' => [
'urn:ietf:params:scim:schemas:core:2.0:User',
'urn:plerion:scim:schemas:extension:2.0:User'
],
'userName' => '<string>',
'externalId' => '<string>',
'name' => [
'formatted' => '<string>',
'givenName' => '<string>',
'familyName' => '<string>'
],
'displayName' => '<string>',
'emails' => [
[
'value' => '<string>',
'type' => '<string>',
'primary' => true
]
],
'active' => true,
'urn:plerion:scim:schemas:extension:2.0:User' => [
'ssoUser' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/scim+json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}"
payload := strings.NewReader("{\n \"schemas\": [\n \"urn:ietf:params:scim:schemas:core:2.0:User\",\n \"urn:plerion:scim:schemas:extension:2.0:User\"\n ],\n \"userName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"name\": {\n \"formatted\": \"<string>\",\n \"givenName\": \"<string>\",\n \"familyName\": \"<string>\"\n },\n \"displayName\": \"<string>\",\n \"emails\": [\n {\n \"value\": \"<string>\",\n \"type\": \"<string>\",\n \"primary\": true\n }\n ],\n \"active\": true,\n \"urn:plerion:scim:schemas:extension:2.0:User\": {\n \"ssoUser\": true\n }\n}")
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))
}HttpResponse<String> response = Unirest.put("https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/scim+json")
.body("{\n \"schemas\": [\n \"urn:ietf:params:scim:schemas:core:2.0:User\",\n \"urn:plerion:scim:schemas:extension:2.0:User\"\n ],\n \"userName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"name\": {\n \"formatted\": \"<string>\",\n \"givenName\": \"<string>\",\n \"familyName\": \"<string>\"\n },\n \"displayName\": \"<string>\",\n \"emails\": [\n {\n \"value\": \"<string>\",\n \"type\": \"<string>\",\n \"primary\": true\n }\n ],\n \"active\": true,\n \"urn:plerion:scim:schemas:extension:2.0:User\": {\n \"ssoUser\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}")
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 = "{\n \"schemas\": [\n \"urn:ietf:params:scim:schemas:core:2.0:User\",\n \"urn:plerion:scim:schemas:extension:2.0:User\"\n ],\n \"userName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"name\": {\n \"formatted\": \"<string>\",\n \"givenName\": \"<string>\",\n \"familyName\": \"<string>\"\n },\n \"displayName\": \"<string>\",\n \"emails\": [\n {\n \"value\": \"<string>\",\n \"type\": \"<string>\",\n \"primary\": true\n }\n ],\n \"active\": true,\n \"urn:plerion:scim:schemas:extension:2.0:User\": {\n \"ssoUser\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:plerion:scim:schemas:extension:2.0:User"
],
"userName": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"externalId": "<string>",
"name": {
"formatted": "<string>",
"givenName": "<string>",
"familyName": "<string>"
},
"displayName": "<string>",
"emails": [
{
"value": "<string>",
"type": "<string>",
"primary": true
}
],
"active": true,
"groups": [
{
"type": "<unknown>",
"format": "<unknown>",
"value": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"display": "<string>"
}
],
"urn:plerion:scim:schemas:extension:2.0:User": {
"ssoUser": true
},
"meta": {
"resourceType": "User",
"created": "2023-11-07T05:31:56Z",
"lastModified": "2023-11-07T05:31:56Z",
"version": "<string>",
"location": "<string>"
}
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}{
"message": "Unauthorized"
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}Replace a user
Full replace of writable attributes; omitted writable attributes are cleared. id, groups, and meta are immutable, and so is the user’s sign-in email: a write that would move it returns 400 with the scimType mutability, on every user, whether or not this API has written to them before. The first write to a Plerion user not yet under management adopts them, which sets the SCIM managed marker and nothing else.
The Plerion extension is the exception to the replace rule. ssoUser changes only when you send it; omit the extension and the current value is kept.
curl --request PUT \
--url https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/scim+json' \
--data '
{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:plerion:scim:schemas:extension:2.0:User"
],
"userName": "<string>",
"externalId": "<string>",
"name": {
"formatted": "<string>",
"givenName": "<string>",
"familyName": "<string>"
},
"displayName": "<string>",
"emails": [
{
"value": "<string>",
"type": "<string>",
"primary": true
}
],
"active": true,
"urn:plerion:scim:schemas:extension:2.0:User": {
"ssoUser": true
}
}
'import requests
url = "https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}"
payload = {
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User", "urn:plerion:scim:schemas:extension:2.0:User"],
"userName": "<string>",
"externalId": "<string>",
"name": {
"formatted": "<string>",
"givenName": "<string>",
"familyName": "<string>"
},
"displayName": "<string>",
"emails": [
{
"value": "<string>",
"type": "<string>",
"primary": True
}
],
"active": True,
"urn:plerion:scim:schemas:extension:2.0:User": { "ssoUser": True }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/scim+json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/scim+json'},
body: JSON.stringify({
schemas: [
'urn:ietf:params:scim:schemas:core:2.0:User',
'urn:plerion:scim:schemas:extension:2.0:User'
],
userName: '<string>',
externalId: '<string>',
name: {formatted: '<string>', givenName: '<string>', familyName: '<string>'},
displayName: '<string>',
emails: [{value: '<string>', type: '<string>', primary: true}],
active: true,
'urn:plerion:scim:schemas:extension:2.0:User': {ssoUser: true}
})
};
fetch('https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'schemas' => [
'urn:ietf:params:scim:schemas:core:2.0:User',
'urn:plerion:scim:schemas:extension:2.0:User'
],
'userName' => '<string>',
'externalId' => '<string>',
'name' => [
'formatted' => '<string>',
'givenName' => '<string>',
'familyName' => '<string>'
],
'displayName' => '<string>',
'emails' => [
[
'value' => '<string>',
'type' => '<string>',
'primary' => true
]
],
'active' => true,
'urn:plerion:scim:schemas:extension:2.0:User' => [
'ssoUser' => true
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/scim+json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}"
payload := strings.NewReader("{\n \"schemas\": [\n \"urn:ietf:params:scim:schemas:core:2.0:User\",\n \"urn:plerion:scim:schemas:extension:2.0:User\"\n ],\n \"userName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"name\": {\n \"formatted\": \"<string>\",\n \"givenName\": \"<string>\",\n \"familyName\": \"<string>\"\n },\n \"displayName\": \"<string>\",\n \"emails\": [\n {\n \"value\": \"<string>\",\n \"type\": \"<string>\",\n \"primary\": true\n }\n ],\n \"active\": true,\n \"urn:plerion:scim:schemas:extension:2.0:User\": {\n \"ssoUser\": true\n }\n}")
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))
}HttpResponse<String> response = Unirest.put("https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/scim+json")
.body("{\n \"schemas\": [\n \"urn:ietf:params:scim:schemas:core:2.0:User\",\n \"urn:plerion:scim:schemas:extension:2.0:User\"\n ],\n \"userName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"name\": {\n \"formatted\": \"<string>\",\n \"givenName\": \"<string>\",\n \"familyName\": \"<string>\"\n },\n \"displayName\": \"<string>\",\n \"emails\": [\n {\n \"value\": \"<string>\",\n \"type\": \"<string>\",\n \"primary\": true\n }\n ],\n \"active\": true,\n \"urn:plerion:scim:schemas:extension:2.0:User\": {\n \"ssoUser\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{region}.api.plerion.com/v1/organization/scim/v2/Users/{userId}")
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 = "{\n \"schemas\": [\n \"urn:ietf:params:scim:schemas:core:2.0:User\",\n \"urn:plerion:scim:schemas:extension:2.0:User\"\n ],\n \"userName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"name\": {\n \"formatted\": \"<string>\",\n \"givenName\": \"<string>\",\n \"familyName\": \"<string>\"\n },\n \"displayName\": \"<string>\",\n \"emails\": [\n {\n \"value\": \"<string>\",\n \"type\": \"<string>\",\n \"primary\": true\n }\n ],\n \"active\": true,\n \"urn:plerion:scim:schemas:extension:2.0:User\": {\n \"ssoUser\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"schemas": [
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:plerion:scim:schemas:extension:2.0:User"
],
"userName": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"externalId": "<string>",
"name": {
"formatted": "<string>",
"givenName": "<string>",
"familyName": "<string>"
},
"displayName": "<string>",
"emails": [
{
"value": "<string>",
"type": "<string>",
"primary": true
}
],
"active": true,
"groups": [
{
"type": "<unknown>",
"format": "<unknown>",
"value": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"display": "<string>"
}
],
"urn:plerion:scim:schemas:extension:2.0:User": {
"ssoUser": true
},
"meta": {
"resourceType": "User",
"created": "2023-11-07T05:31:56Z",
"lastModified": "2023-11-07T05:31:56Z",
"version": "<string>",
"location": "<string>"
}
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}{
"message": "Unauthorized"
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}{
"schemas": [
"urn:ietf:params:scim:api:messages:2.0:Error"
],
"status": "409",
"scimType": "invalidSyntax",
"detail": "A user with this userName already exists."
}Authorizations
Plerion organization API key (plerion_oak_…), created by an organization admin in the Plerion console. Write operations require a key with readWrite access level; GET and .search work with read access level.
Path Parameters
The Plerion-assigned user id (SCIM id).
Body
SCIM core User as supported by Plerion. Other standard SCIM attributes are accepted and returned unchanged but do not affect Plerion behavior. The user's Plerion sign-in email is derived from the payload with no configuration: userName when that value is an email address, otherwise the primary email, otherwise the work email.
A user maintained outside Plerion, by an identity provider sync or by calls to this API, is badged SCIM managed in the Plerion console. The badge does not stop this API from changing the user, but the next sync may overwrite the change.
[
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:plerion:scim:schemas:extension:2.0:User"
]
Required. Unique within the organization, case-insensitive.
The identity provider's identifier for the user. Filterable.
Show child attributes
Show child attributes
The Plerion display name is taken from name.formatted, falling back to displayName, then "givenName familyName".
Show child attributes
Show child attributes
false deactivates the user. Sign-in is blocked, sessions end within seconds, and the user's API keys are revoked. The record is retained.
Plerion schema extension for the User resource, urn:plerion:scim:schemas:extension:2.0:User. It carries the one attribute SCIM has no place for: how the user signs in.
Show child attributes
Show child attributes
Response
The updated user.
SCIM core User as supported by Plerion. Other standard SCIM attributes are accepted and returned unchanged but do not affect Plerion behavior. The user's Plerion sign-in email is derived from the payload with no configuration: userName when that value is an email address, otherwise the primary email, otherwise the work email.
A user maintained outside Plerion, by an identity provider sync or by calls to this API, is badged SCIM managed in the Plerion console. The badge does not stop this API from changing the user, but the next sync may overwrite the change.
[
"urn:ietf:params:scim:schemas:core:2.0:User",
"urn:plerion:scim:schemas:extension:2.0:User"
]
Required. Unique within the organization, case-insensitive.
Plerion-assigned identifier. Use it for all subsequent requests.
The identity provider's identifier for the user. Filterable.
Show child attributes
Show child attributes
The Plerion display name is taken from name.formatted, falling back to displayName, then "givenName familyName".
Show child attributes
Show child attributes
false deactivates the user. Sign-in is blocked, sessions end within seconds, and the user's API keys are revoked. The record is retained.
Show child attributes
Show child attributes
Plerion schema extension for the User resource, urn:plerion:scim:schemas:extension:2.0:User. It carries the one attribute SCIM has no place for: how the user signs in.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?