Update Rule
PUT {{apiPath}}/environments/{{envID}}/propagation/rules/{{ruleID}}
The PUT {{apiPath}}/environments/{{envID}}/propagation/rules/{{ruleID}} operation updates the property values of the identified propagation rule resource.
Prerequisites
-
Refer to Identity Propagation (Provisioning) for important overview information.
Request Model
Refer to Propagation rule data model for full property descriptions.
If the rule is not a writeback rule:
| Property | Type | Required? |
|---|---|---|
|
Boolean |
Optional |
|
Object |
Required/Optional |
|
Boolean |
Optional |
|
String |
Optional |
|
Object[] |
Optional |
|
String |
Required |
|
String |
Required |
|
String |
Optional |
|
String[] |
Optional |
The configuration object is required for outbound LDAP Gateway stores (type LdapGateway) and inbound LDAP Gateway stores (where users are provisioned into PingOne), optional for all others and ignored if used.
|
This outbound LDAP configuration object is required for outbound LDAP Gateway stores (type LdapGateway).
| Property | Type | Required? |
|---|---|---|
|
String |
Required |
|
String |
Required |
This inbound LDAP configuration object is required for inbound LDAP Gateway stores (where users are provisioned into PingOne).
If AUTHENTICATE_VIA_AD_LDAP is false, then the GATEWAY_USER_TYPE_* configuration attributes are optional and ignored if used. Note that USERS_BASE_DN is always required and unaffected by the value of AUTHENTICATE_VIA_AD_LDAP.
AUTHENTICATE_VIA_AD_LDAP can only be true if a userTypes object is configured in the gateway as returned by Read One Gateway. The remaining configuration attributes are required and must exactly match the corresponding attribute in the userTypes array object.
The userTypes object must not have a newUserLookup property if it is to be used with AUTHENTICATE_VIA_AD_LDAP as true.
|
| Property | Type | Required? |
|---|---|---|
|
Boolean |
Required |
|
Boolean |
Required/Optional |
|
String |
Required/Optional |
|
String |
Required/Optional |
|
String |
Required/Optional |
|
String |
Required/Optional |
|
String |
Required |
If the rule is a writeback rule:
| Property | Type | Required? |
|---|---|---|
|
String |
Optional |
|
String |
Required |
Body
raw ( application/json )
{
"plan": {
"id": "{{planID}}"
},
"name": "updated rule",
"environment": {
"id": "{{envID}}"
},
"sourceStore": {
"id": "{{sourceStoreID}}"
},
"targetStore": {
"id": "{{targetStoreID}}"
},
"groups": [
{
"id": "{{groupID}}"
}
],
"active": true,
"populationExpression": "population.id eq \"{{popID}}\""
}
Example Request
-
cURL
-
C#
-
Go
-
HTTP
-
Java
-
jQuery
-
NodeJS
-
Python
-
PHP
-
Ruby
-
Swift
curl --location --globoff --request PUT '{{apiPath}}/environments/{{envID}}/propagation/rules/{{ruleID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"plan": {
"id": "{{planID}}"
},
"name": "updated rule",
"environment": {
"id": "{{envID}}"
},
"sourceStore": {
"id": "{{sourceStoreID}}"
},
"targetStore": {
"id": "{{targetStoreID}}"
},
"groups": [
{
"id": "{{groupID}}"
}
],
"active": true,
"populationExpression": "population.id eq \"{{popID}}\""
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/propagation/rules/{{ruleID}}")
{
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" +
@" ""plan"": {" + "\n" +
@" ""id"": ""{{planID}}""" + "\n" +
@" }," + "\n" +
@" ""name"": ""updated rule""," + "\n" +
@" ""environment"": {" + "\n" +
@" ""id"": ""{{envID}}""" + "\n" +
@" }," + "\n" +
@" ""sourceStore"": {" + "\n" +
@" ""id"": ""{{sourceStoreID}}""" + "\n" +
@" }," + "\n" +
@" ""targetStore"": {" + "\n" +
@" ""id"": ""{{targetStoreID}}""" + "\n" +
@" }," + "\n" +
@" ""groups"": [" + "\n" +
@" {" + "\n" +
@" ""id"": ""{{groupID}}""" + "\n" +
@" }" + "\n" +
@" ]," + "\n" +
@" ""active"": true," + "\n" +
@" ""populationExpression"": ""population.id eq \""{{popID}}\""""" + "\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}}/propagation/rules/{{ruleID}}"
method := "PUT"
payload := strings.NewReader(`{
"plan": {
"id": "{{planID}}"
},
"name": "updated rule",
"environment": {
"id": "{{envID}}"
},
"sourceStore": {
"id": "{{sourceStoreID}}"
},
"targetStore": {
"id": "{{targetStoreID}}"
},
"groups": [
{
"id": "{{groupID}}"
}
],
"active": true,
"populationExpression": "population.id eq \"{{popID}}\""
}`)
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}}/propagation/rules/{{ruleID}} HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}
{
"plan": {
"id": "{{planID}}"
},
"name": "updated rule",
"environment": {
"id": "{{envID}}"
},
"sourceStore": {
"id": "{{sourceStoreID}}"
},
"targetStore": {
"id": "{{targetStoreID}}"
},
"groups": [
{
"id": "{{groupID}}"
}
],
"active": true,
"populationExpression": "population.id eq \"{{popID}}\""
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"plan\": {\n \"id\": \"{{planID}}\"\n },\n \"name\": \"updated rule\",\n \"environment\": {\n \"id\": \"{{envID}}\"\n },\n \"sourceStore\": {\n \"id\": \"{{sourceStoreID}}\"\n },\n \"targetStore\": {\n \"id\": \"{{targetStoreID}}\"\n },\n \"groups\": [\n {\n \"id\": \"{{groupID}}\"\n }\n ],\n \"active\": true,\n \"populationExpression\": \"population.id eq \\\"{{popID}}\\\"\"\n}");
Request request = new Request.Builder()
.url("{{apiPath}}/environments/{{envID}}/propagation/rules/{{ruleID}}")
.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}}/propagation/rules/{{ruleID}}",
"method": "PUT",
"timeout": 0,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{accessToken}}"
},
"data": JSON.stringify({
"plan": {
"id": "{{planID}}"
},
"name": "updated rule",
"environment": {
"id": "{{envID}}"
},
"sourceStore": {
"id": "{{sourceStoreID}}"
},
"targetStore": {
"id": "{{targetStoreID}}"
},
"groups": [
{
"id": "{{groupID}}"
}
],
"active": true,
"populationExpression": "population.id eq \"{{popID}}\""
}),
};
$.ajax(settings).done(function (response) {
console.log(response);
});
var request = require('request');
var options = {
'method': 'PUT',
'url': '{{apiPath}}/environments/{{envID}}/propagation/rules/{{ruleID}}',
'headers': {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{accessToken}}'
},
body: JSON.stringify({
"plan": {
"id": "{{planID}}"
},
"name": "updated rule",
"environment": {
"id": "{{envID}}"
},
"sourceStore": {
"id": "{{sourceStoreID}}"
},
"targetStore": {
"id": "{{targetStoreID}}"
},
"groups": [
{
"id": "{{groupID}}"
}
],
"active": true,
"populationExpression": "population.id eq \"{{popID}}\""
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{{apiPath}}/environments/{{envID}}/propagation/rules/{{ruleID}}"
payload = json.dumps({
"plan": {
"id": "{{planID}}"
},
"name": "updated rule",
"environment": {
"id": "{{envID}}"
},
"sourceStore": {
"id": "{{sourceStoreID}}"
},
"targetStore": {
"id": "{{targetStoreID}}"
},
"groups": [
{
"id": "{{groupID}}"
}
],
"active": True,
"populationExpression": "population.id eq \"{{popID}}\""
})
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}}/propagation/rules/{{ruleID}}');
$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 "plan": {\n "id": "{{planID}}"\n },\n "name": "updated rule",\n "environment": {\n "id": "{{envID}}"\n },\n "sourceStore": {\n "id": "{{sourceStoreID}}"\n },\n "targetStore": {\n "id": "{{targetStoreID}}"\n },\n "groups": [\n {\n "id": "{{groupID}}"\n }\n ],\n "active": true,\n "populationExpression": "population.id eq \\"{{popID}}\\""\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}}/propagation/rules/{{ruleID}}")
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({
"plan": {
"id": "{{planID}}"
},
"name": "updated rule",
"environment": {
"id": "{{envID}}"
},
"sourceStore": {
"id": "{{sourceStoreID}}"
},
"targetStore": {
"id": "{{targetStoreID}}"
},
"groups": [
{
"id": "{{groupID}}"
}
],
"active": true,
"populationExpression": "population.id eq \"{{popID}}\""
})
response = http.request(request)
puts response.read_body
let parameters = "{\n \"plan\": {\n \"id\": \"{{planID}}\"\n },\n \"name\": \"updated rule\",\n \"environment\": {\n \"id\": \"{{envID}}\"\n },\n \"sourceStore\": {\n \"id\": \"{{sourceStoreID}}\"\n },\n \"targetStore\": {\n \"id\": \"{{targetStoreID}}\"\n },\n \"groups\": [\n {\n \"id\": \"{{groupID}}\"\n }\n ],\n \"active\": true,\n \"populationExpression\": \"population.id eq \\\"{{popID}}\\\"\"\n}"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/propagation/rules/{{ruleID}}")!,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
{
"id": "66cc421f-8b1e-4b82-8f0b-20a1b7eec998",
"environment": {
"id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
},
"createdAt": "2023-05-22T18:08:32.784Z",
"updatedAt": "2023-05-22T18:36:51.304Z",
"plan": {
"id": "9b0f46a7-1987-4c80-8dfd-b4f34a96d216"
},
"sourceStore": {
"id": "01f31fb7-6e39-4678-9420-e3b2e7358fdd"
},
"targetStore": {
"id": "d43ab23a-0c41-46b7-9468-66b52561636e"
},
"name": "updated rule",
"active": true,
"populationExpression": "population.id eq \"cb3ef0a0-0ff5-4f60-ae82-4ae65d9d0e3a\"",
"deprovision": false,
"groups": [
{
"id": "1da23f50-4258-43e4-93cd-a7e9e9c5e167"
}
],
"_links": {
"create": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/propagation/plans/9b0f46a7-1987-4c80-8dfd-b4f34a96d216/rules"
},
"self": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/propagation/rules/66cc421f-8b1e-4b82-8f0b-20a1b7eec998"
},
"update": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/propagation/rules/66cc421f-8b1e-4b82-8f0b-20a1b7eec998"
},
"delete": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/propagation/rules/66cc421f-8b1e-4b82-8f0b-20a1b7eec998"
}
}
}