PingOne Platform APIs

Update PingOne access control scope

   

PUT {{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}

The PUT {{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}} operation updates the property values of the identified access control scope. At this time, PingOne supports updates for the p1:read:user:{suffix} and p1:update:user:{suffix} platform scopes.

To update the list of accessible user schema attributes, the request body must specify the scope name and it must expressly list the accessible user attributes in the schemaAttributes property. Any user schema attributes not specified in the schemaAttributes property list are not accessible. The response returns a 200 OK message, and it shows the updated property data for the modified scope resource.

The p1:update:user:{suffix} self-service scope is not granted if the user authenticates with an authoritative identityProvider - the user has a user.identityProvider.id value set and their user.identityProvider.type value is not PING_ONE.

Prerequisites

Request Model
Property Type Required?

description

String

Optional

name

String

Required

schemaAttributes

String[]

Required

Refer to the Resource scopes data model for full property descriptions.

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "name": "p1:update:user",
    "description": "An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property",
    "schemaAttributes": ["name.family", "name.given", "email", "address.streetAddress", "address.locality", "address.region", "address.postalCode", "address.countryCode", "primaryPhone", "mobilePhone"]
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff --request PUT '{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "name": "p1:update:user",
    "description": "An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property",
    "schemaAttributes": ["name.family", "name.given", "email", "address.streetAddress", "address.locality", "address.region", "address.postalCode", "address.countryCode", "primaryPhone", "mobilePhone"]
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Put);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@"    ""name"": ""p1:update:user""," + "\n" +
@"    ""description"": ""An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property""," + "\n" +
@"    ""schemaAttributes"": [""name.family"", ""name.given"", ""email"", ""address.streetAddress"", ""address.locality"", ""address.region"", ""address.postalCode"", ""address.countryCode"", ""primaryPhone"", ""mobilePhone""] " + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}"
  method := "PUT"

  payload := strings.NewReader(`{
    "name": "p1:update:user",
    "description": "An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property",
    "schemaAttributes": ["name.family", "name.given", "email", "address.streetAddress", "address.locality", "address.region", "address.postalCode", "address.countryCode", "primaryPhone", "mobilePhone"]
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Bearer {{accessToken}}")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
PUT /environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}} HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
    "name": "p1:update:user",
    "description": "An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property",
    "schemaAttributes": ["name.family", "name.given", "email", "address.streetAddress", "address.locality", "address.region", "address.postalCode", "address.countryCode", "primaryPhone", "mobilePhone"]
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"name\": \"p1:update:user\",\n    \"description\": \"An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property\",\n    \"schemaAttributes\": [\"name.family\", \"name.given\", \"email\", \"address.streetAddress\", \"address.locality\", \"address.region\", \"address.postalCode\", \"address.countryCode\", \"primaryPhone\", \"mobilePhone\"] \n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}")
  .method("PUT", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}",
  "method": "PUT",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "p1:update:user",
    "description": "An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property",
    "schemaAttributes": [
      "name.family",
      "name.given",
      "email",
      "address.streetAddress",
      "address.locality",
      "address.region",
      "address.postalCode",
      "address.countryCode",
      "primaryPhone",
      "mobilePhone"
    ]
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'PUT',
  'url': '{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "p1:update:user",
    "description": "An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property",
    "schemaAttributes": [
      "name.family",
      "name.given",
      "email",
      "address.streetAddress",
      "address.locality",
      "address.region",
      "address.postalCode",
      "address.countryCode",
      "primaryPhone",
      "mobilePhone"
    ]
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
import requests
import json

url = "{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}"

payload = json.dumps({
  "name": "p1:update:user",
  "description": "An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property",
  "schemaAttributes": [
    "name.family",
    "name.given",
    "email",
    "address.streetAddress",
    "address.locality",
    "address.region",
    "address.postalCode",
    "address.countryCode",
    "primaryPhone",
    "mobilePhone"
  ]
})
headers = {
  'Content-Type': 'application/json',
  'Authorization': 'Bearer {{accessToken}}'
}

response = requests.request("PUT", url, headers=headers, data=payload)

print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}');
$request->setMethod(HTTP_Request2::METHOD_PUT);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/json',
  'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n    "name": "p1:update:user",\n    "description": "An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property",\n    "schemaAttributes": ["name.family", "name.given", "email", "address.streetAddress", "address.locality", "address.region", "address.postalCode", "address.countryCode", "primaryPhone", "mobilePhone"] \n}');
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
require "uri"
require "json"
require "net/http"

url = URI("{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Put.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
  "name": "p1:update:user",
  "description": "An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property",
  "schemaAttributes": [
    "name.family",
    "name.given",
    "email",
    "address.streetAddress",
    "address.locality",
    "address.region",
    "address.postalCode",
    "address.countryCode",
    "primaryPhone",
    "mobilePhone"
  ]
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"name\": \"p1:update:user\",\n    \"description\": \"An UPDATED access control scope that includes only the user schema attributes listed in the schemaAttributes property\",\n    \"schemaAttributes\": [\"name.family\", \"name.given\", \"email\", \"address.streetAddress\", \"address.locality\", \"address.region\", \"address.postalCode\", \"address.countryCode\", \"primaryPhone\", \"mobilePhone\"] \n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/resources/{{resourceID}}/scopes/{{scopeID}}")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")

request.httpMethod = "PUT"
request.httpBody = postData

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()