PingOne Platform APIs

Update Custom Risk Predictor

 

PUT {{apiPath}}/environments/{{envID}}/riskPredictors/{{riskPredictorID}}

The PUT {{apiPath}}/environments/{{envID}}/riskPredictors/{{riskPredictorID}} operation updates the setting for a custom risk predictor. The API allows updates to risk predictors only if the type property is set to MAP.

A risk predictor’s type property cannot be updated in a PUT request.

Prerequisites

Request Model

Refer to Risk Predictors for the complete data models.

Base data model

For a type value of MAP, refer also to Custom data model. For a type value of VELOCITY, refer also to Velocity data model.

Property Type Required?

compactName

String

Required

default

Object

Required

default.weight

Integer

Required

default.result

Object

Required

default.result.level

String

Required

description

String

Optional

licensed

Boolean

Required

name

String

Required

whiteList

List[]

Optional

Composite data model

Property Type Required?

composition

Object

Optional

composition.condition

String[]

Optional

composition.level

String[]

Optional

Custom data model

Property Type Required?

map

Object

Optional

map.high.list

String[]

Optional

map.medium.list

String[]

Optional

map.low.list

String[]

Optional

Velocity data model

Property Type Required?

by

List

Optional

of

String

Optional

threshold

Object

Optional

threshold.high

Integer

Optional

threshold.medium

Integer

Optional

threshold.source

String

Optional

threshold.calculatedAt

Date

Optional

threshold.expiresdAt

Date

Optional

velocity.distinctCount

Integer

Required

velocity.during

Integer

Required

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "name": "My Danger Predictor",
    "licensed": true,
    "map": {
        "high": {
            "list": [
                "Dangerous",
                "Insanely Dangerous",
                "Unspeakably Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "medium": {
            "list": [
                "Kinda Dangerous",
                "Not Very Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "low": {
            "list": [
                "Kinda Safe",
                "Safe"
            ],
            "contains": "${event.danger.type}"
        }
    },
    "default": {
        "weight": 5,
        "result": {
            "level": "HIGH",
            "type": "VALUE"
        }
    }
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff --request PUT '{{apiPath}}/environments/{{envID}}/riskPredictors/{{riskPredictorID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "name": "My Danger Predictor",
    "licensed": true,
    "map": {
        "high": {
            "list": [
                "Dangerous",
                "Insanely Dangerous",
                "Unspeakably Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "medium": {
            "list": [
                "Kinda Dangerous",
                "Not Very Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "low": {
            "list": [
                "Kinda Safe",
                "Safe"
            ],
            "contains": "${event.danger.type}"
        }
    },
    "default": {
        "weight": 5,
        "result": {
            "level": "HIGH",
            "type": "VALUE"
        }
    }
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/riskPredictors/{{riskPredictorID}}")
{
  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"": ""My Danger Predictor""," + "\n" +
@"    ""licensed"": true," + "\n" +
@"    ""map"": {" + "\n" +
@"        ""high"": {" + "\n" +
@"            ""list"": [" + "\n" +
@"                ""Dangerous""," + "\n" +
@"                ""Insanely Dangerous""," + "\n" +
@"                ""Unspeakably Dangerous""" + "\n" +
@"            ]," + "\n" +
@"            ""contains"": ""${event.danger.type}""" + "\n" +
@"        }," + "\n" +
@"        ""medium"": {" + "\n" +
@"            ""list"": [" + "\n" +
@"                ""Kinda Dangerous""," + "\n" +
@"                ""Not Very Dangerous""" + "\n" +
@"            ]," + "\n" +
@"            ""contains"": ""${event.danger.type}""" + "\n" +
@"        }," + "\n" +
@"        ""low"": {" + "\n" +
@"            ""list"": [" + "\n" +
@"                ""Kinda Safe""," + "\n" +
@"                ""Safe""" + "\n" +
@"            ]," + "\n" +
@"            ""contains"": ""${event.danger.type}""" + "\n" +
@"        }" + "\n" +
@"    }," + "\n" +
@"    ""default"": {" + "\n" +
@"        ""weight"": 5," + "\n" +
@"        ""result"": {" + "\n" +
@"            ""level"": ""HIGH""," + "\n" +
@"            ""type"": ""VALUE""" + "\n" +
@"        }" + "\n" +
@"    }" + "\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}}/riskPredictors/{{riskPredictorID}}"
  method := "PUT"

  payload := strings.NewReader(`{
    "name": "My Danger Predictor",
    "licensed": true,
    "map": {
        "high": {
            "list": [
                "Dangerous",
                "Insanely Dangerous",
                "Unspeakably Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "medium": {
            "list": [
                "Kinda Dangerous",
                "Not Very Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "low": {
            "list": [
                "Kinda Safe",
                "Safe"
            ],
            "contains": "${event.danger.type}"
        }
    },
    "default": {
        "weight": 5,
        "result": {
            "level": "HIGH",
            "type": "VALUE"
        }
    }
}`)

  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}}/riskPredictors/{{riskPredictorID}} HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
    "name": "My Danger Predictor",
    "licensed": true,
    "map": {
        "high": {
            "list": [
                "Dangerous",
                "Insanely Dangerous",
                "Unspeakably Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "medium": {
            "list": [
                "Kinda Dangerous",
                "Not Very Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "low": {
            "list": [
                "Kinda Safe",
                "Safe"
            ],
            "contains": "${event.danger.type}"
        }
    },
    "default": {
        "weight": 5,
        "result": {
            "level": "HIGH",
            "type": "VALUE"
        }
    }
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"name\": \"My Danger Predictor\",\n    \"licensed\": true,\n    \"map\": {\n        \"high\": {\n            \"list\": [\n                \"Dangerous\",\n                \"Insanely Dangerous\",\n                \"Unspeakably Dangerous\"\n            ],\n            \"contains\": \"${event.danger.type}\"\n        },\n        \"medium\": {\n            \"list\": [\n                \"Kinda Dangerous\",\n                \"Not Very Dangerous\"\n            ],\n            \"contains\": \"${event.danger.type}\"\n        },\n        \"low\": {\n            \"list\": [\n                \"Kinda Safe\",\n                \"Safe\"\n            ],\n            \"contains\": \"${event.danger.type}\"\n        }\n    },\n    \"default\": {\n        \"weight\": 5,\n        \"result\": {\n            \"level\": \"HIGH\",\n            \"type\": \"VALUE\"\n        }\n    }\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/riskPredictors/{{riskPredictorID}}")
  .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}}/riskPredictors/{{riskPredictorID}}",
  "method": "PUT",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "My Danger Predictor",
    "licensed": true,
    "map": {
      "high": {
        "list": [
          "Dangerous",
          "Insanely Dangerous",
          "Unspeakably Dangerous"
        ],
        "contains": "${event.danger.type}"
      },
      "medium": {
        "list": [
          "Kinda Dangerous",
          "Not Very Dangerous"
        ],
        "contains": "${event.danger.type}"
      },
      "low": {
        "list": [
          "Kinda Safe",
          "Safe"
        ],
        "contains": "${event.danger.type}"
      }
    },
    "default": {
      "weight": 5,
      "result": {
        "level": "HIGH",
        "type": "VALUE"
      }
    }
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'PUT',
  'url': '{{apiPath}}/environments/{{envID}}/riskPredictors/{{riskPredictorID}}',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "My Danger Predictor",
    "licensed": true,
    "map": {
      "high": {
        "list": [
          "Dangerous",
          "Insanely Dangerous",
          "Unspeakably Dangerous"
        ],
        "contains": "${event.danger.type}"
      },
      "medium": {
        "list": [
          "Kinda Dangerous",
          "Not Very Dangerous"
        ],
        "contains": "${event.danger.type}"
      },
      "low": {
        "list": [
          "Kinda Safe",
          "Safe"
        ],
        "contains": "${event.danger.type}"
      }
    },
    "default": {
      "weight": 5,
      "result": {
        "level": "HIGH",
        "type": "VALUE"
      }
    }
  })

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

url = "{{apiPath}}/environments/{{envID}}/riskPredictors/{{riskPredictorID}}"

payload = json.dumps({
  "name": "My Danger Predictor",
  "licensed": True,
  "map": {
    "high": {
      "list": [
        "Dangerous",
        "Insanely Dangerous",
        "Unspeakably Dangerous"
      ],
      "contains": "${event.danger.type}"
    },
    "medium": {
      "list": [
        "Kinda Dangerous",
        "Not Very Dangerous"
      ],
      "contains": "${event.danger.type}"
    },
    "low": {
      "list": [
        "Kinda Safe",
        "Safe"
      ],
      "contains": "${event.danger.type}"
    }
  },
  "default": {
    "weight": 5,
    "result": {
      "level": "HIGH",
      "type": "VALUE"
    }
  }
})
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}}/riskPredictors/{{riskPredictorID}}');
$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": "My Danger Predictor",\n    "licensed": true,\n    "map": {\n        "high": {\n            "list": [\n                "Dangerous",\n                "Insanely Dangerous",\n                "Unspeakably Dangerous"\n            ],\n            "contains": "${event.danger.type}"\n        },\n        "medium": {\n            "list": [\n                "Kinda Dangerous",\n                "Not Very Dangerous"\n            ],\n            "contains": "${event.danger.type}"\n        },\n        "low": {\n            "list": [\n                "Kinda Safe",\n                "Safe"\n            ],\n            "contains": "${event.danger.type}"\n        }\n    },\n    "default": {\n        "weight": 5,\n        "result": {\n            "level": "HIGH",\n            "type": "VALUE"\n        }\n    }\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}}/riskPredictors/{{riskPredictorID}}")

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": "My Danger Predictor",
  "licensed": true,
  "map": {
    "high": {
      "list": [
        "Dangerous",
        "Insanely Dangerous",
        "Unspeakably Dangerous"
      ],
      "contains": "\${event.danger.type}"
    },
    "medium": {
      "list": [
        "Kinda Dangerous",
        "Not Very Dangerous"
      ],
      "contains": "\${event.danger.type}"
    },
    "low": {
      "list": [
        "Kinda Safe",
        "Safe"
      ],
      "contains": "\${event.danger.type}"
    }
  },
  "default": {
    "weight": 5,
    "result": {
      "level": "HIGH",
      "type": "VALUE"
    }
  }
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"name\": \"My Danger Predictor\",\n    \"licensed\": true,\n    \"map\": {\n        \"high\": {\n            \"list\": [\n                \"Dangerous\",\n                \"Insanely Dangerous\",\n                \"Unspeakably Dangerous\"\n            ],\n            \"contains\": \"${event.danger.type}\"\n        },\n        \"medium\": {\n            \"list\": [\n                \"Kinda Dangerous\",\n                \"Not Very Dangerous\"\n            ],\n            \"contains\": \"${event.danger.type}\"\n        },\n        \"low\": {\n            \"list\": [\n                \"Kinda Safe\",\n                \"Safe\"\n            ],\n            \"contains\": \"${event.danger.type}\"\n        }\n    },\n    \"default\": {\n        \"weight\": 5,\n        \"result\": {\n            \"level\": \"HIGH\",\n            \"type\": \"VALUE\"\n        }\n    }\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/riskPredictors/{{riskPredictorID}}")!,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/riskPredictors/3ab65954-05b0-4ed4-b525-5830be4c6e18"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "3ab65954-05b0-4ed4-b525-5830be4c6e18",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "createdAt": "2021-09-29T19:30:37.124Z",
    "updatedAt": "2021-09-29T19:40:03.442Z",
    "name": "My Danger Predictor",
    "compactName": "riskPred",
    "licensed": true,
    "map": {
        "high": {
            "list": [
                "Dangerous",
                "Insanely Dangerous",
                "Unspeakably Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "medium": {
            "list": [
                "Kinda Dangerous",
                "Not Very Dangerous"
            ],
            "contains": "${event.danger.type}"
        },
        "low": {
            "list": [
                "Kinda Safe",
                "Safe"
            ],
            "contains": "${event.danger.type}"
        }
    },
    "type": "MAP",
    "default": {
        "weight": 5,
        "result": {
            "level": "HIGH",
            "type": "VALUE"
        }
    }
}