PingOne Platform APIs

Update Attribute (Put)

 

PUT {{apiPath}}/environments/{{envID}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}

You can also update existing attribute properties using PUT {{apiPath}}/environments/{{envID}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}. The PUT operation removes any existing attribute properties omitted from the request body.

An attribute can support multiple values if the multiValued property is set to true. If the multiValued property is set to false or is null, the User object will contain the attribute value as a single value. If multiValued is set to true, the value in the User object will be an array. When searches are performed on User schema data, a user will match if any value of a multiValued attribute is part of the search criteria.

Prerequisites

Request Model

Refer to the Schema attributes POST, PUT, PATCH data model for full property descriptions.

Property Type Required?

description

String

Optional

displayName

String

Optional

enabled

Boolean

Required

enumeratedValues[]

Array

Optional

enumeratedValues[].value

String

Required

enumeratedValues[].archived

Boolean

Optional

enumeratedValues[].description

String

Optional

ldapAttribute

String

Required

multiValued

Boolean

Optional

name

String

Required

regexValidation

Object

Optional

regexValidation.pattern

String

Required

regexValidation.requirements

String

Required

regexValidation.valuesPatternShouldMatch

Array

Optional

regexValidation.valuesPatternShouldNotMatch

Array

Optional

schema.id

String

Required

schemaType

String

Required

subAttributes

Array

Optional

subAttributes.description

String

Optional

subAttributes.displayName

String

Optional

subAttributes.enabled

Boolean

Required

subAttributes.name

String

Required

subAttributes.required

Boolean

Optional

subAttributes.schemaType

String

Required

subAttributes.type

String

Optional

subAttributes.unique

Boolean

Required

type

String

Optional

unique

Boolean

Required

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "name": "officeLocation",
    "displayName": "An optional property that specifies the display name of the attribute.",
    "description": "An optional property that specifies the description of the new attribute.",
    "schemaType": "CUSTOM",
    "type": "STRING",
    "unique": true,
    "enabled": false,
    "multiValued": false
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff --request PUT '{{apiPath}}/environments/{{envID}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "name": "officeLocation",
    "displayName": "An optional property that specifies the display name of the attribute.",
    "description": "An optional property that specifies the description of the new attribute.",
    "schemaType": "CUSTOM",
    "type": "STRING",
    "unique": true,
    "enabled": false,
    "multiValued": false
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}")
{
  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"": ""officeLocation""," + "\n" +
@"    ""displayName"": ""An optional property that specifies the display name of the attribute.""," + "\n" +
@"    ""description"": ""An optional property that specifies the description of the new attribute.""," + "\n" +
@"    ""schemaType"": ""CUSTOM""," + "\n" +
@"    ""type"": ""STRING""," + "\n" +
@"    ""unique"": true," + "\n" +
@"    ""enabled"": false," + "\n" +
@"    ""multiValued"": false" + "\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}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}"
  method := "PUT"

  payload := strings.NewReader(`{
    "name": "officeLocation",
    "displayName": "An optional property that specifies the display name of the attribute.",
    "description": "An optional property that specifies the description of the new attribute.",
    "schemaType": "CUSTOM",
    "type": "STRING",
    "unique": true,
    "enabled": false,
    "multiValued": false
}`)

  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}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}} HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
    "name": "officeLocation",
    "displayName": "An optional property that specifies the display name of the attribute.",
    "description": "An optional property that specifies the description of the new attribute.",
    "schemaType": "CUSTOM",
    "type": "STRING",
    "unique": true,
    "enabled": false,
    "multiValued": false
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"name\": \"officeLocation\",\n    \"displayName\": \"An optional property that specifies the display name of the attribute.\",\n    \"description\": \"An optional property that specifies the description of the new attribute.\",\n    \"schemaType\": \"CUSTOM\",\n    \"type\": \"STRING\",\n    \"unique\": true,\n    \"enabled\": false,\n    \"multiValued\": false\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}")
  .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}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}",
  "method": "PUT",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "officeLocation",
    "displayName": "An optional property that specifies the display name of the attribute.",
    "description": "An optional property that specifies the description of the new attribute.",
    "schemaType": "CUSTOM",
    "type": "STRING",
    "unique": true,
    "enabled": false,
    "multiValued": false
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'PUT',
  'url': '{{apiPath}}/environments/{{envID}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "officeLocation",
    "displayName": "An optional property that specifies the display name of the attribute.",
    "description": "An optional property that specifies the description of the new attribute.",
    "schemaType": "CUSTOM",
    "type": "STRING",
    "unique": true,
    "enabled": false,
    "multiValued": false
  })

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

url = "{{apiPath}}/environments/{{envID}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}"

payload = json.dumps({
  "name": "officeLocation",
  "displayName": "An optional property that specifies the display name of the attribute.",
  "description": "An optional property that specifies the description of the new attribute.",
  "schemaType": "CUSTOM",
  "type": "STRING",
  "unique": True,
  "enabled": False,
  "multiValued": False
})
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}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}');
$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": "officeLocation",\n    "displayName": "An optional property that specifies the display name of the attribute.",\n    "description": "An optional property that specifies the description of the new attribute.",\n    "schemaType": "CUSTOM",\n    "type": "STRING",\n    "unique": true,\n    "enabled": false,\n    "multiValued": false\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}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}")

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": "officeLocation",
  "displayName": "An optional property that specifies the display name of the attribute.",
  "description": "An optional property that specifies the description of the new attribute.",
  "schemaType": "CUSTOM",
  "type": "STRING",
  "unique": true,
  "enabled": false,
  "multiValued": false
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"name\": \"officeLocation\",\n    \"displayName\": \"An optional property that specifies the display name of the attribute.\",\n    \"description\": \"An optional property that specifies the description of the new attribute.\",\n    \"schemaType\": \"CUSTOM\",\n    \"type\": \"STRING\",\n    \"unique\": true,\n    \"enabled\": false,\n    \"multiValued\": false\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/schemas/{{schemaID}}/attributes/{{schemaAttrID}}")!,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()

Example Response

200 OK

{
    "_links": {
        "self": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/schemas/6497b7af-99d1-4217-8a82-057fcc3b7401/attributes/0d5fe0cc-ad79-41d8-b1f5-270c4e807bd0"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        },
        "schema": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/schemas/6497b7af-99d1-4217-8a82-057fcc3b7401"
        }
    },
    "id": "0d5fe0cc-ad79-41d8-b1f5-270c4e807bd0",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "name": "officeLocation",
    "displayName": "An optional property that specifies the display name of the attribute.",
    "description": "An optional property that specifies the description of the new attribute.",
    "schemaType": "CUSTOM",
    "type": "STRING",
    "unique": true,
    "enabled": false,
    "multiValued": false,
    "required": false,
    "schema": {
        "id": "6497b7af-99d1-4217-8a82-057fcc3b7401"
    }
}