Step 8: Create the progressive profiling sign-on policy action
POST {{apiPath}}/environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions
The POST {{apiPath}}/environments/{{envID}}/signOnPolicies/{{policyID}}/actions operation creates the PROGRESSIVE_PROFILING sign-on policy action resource, which is associated with the sign-on policy ({{policyID}}) specified in the request URL.
In this use case, the priority property in the request body is set to 50 (a lower priority than the LOGIN action) to ensure that the progressive profiling action occurs after the login action. The attributes array specifies that the progressive profiling sign-on form will prompt the user to provide a mobilePhone number that will be added to the user’s profile during the sign-on flow. The attributes.required property is set to false, which allows users to bypass the progressive profiling action, if they choose.
Example Request
-
cURL
-
C#
-
Go
-
HTTP
-
Java
-
jQuery
-
NodeJS
-
Python
-
PHP
-
Ruby
-
Swift
curl --location --globoff '{{apiPath}}/environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"priority": 50,
"type": "PROGRESSIVE_PROFILING",
"promptText": "Please provide the following information.",
"promptIntervalSeconds": 3600,
"preventMultiplePromptsPerFlow": false,
"attributes": [
{
"name": "mobilePhone",
"required": false
}
]
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions")
{
MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@" ""priority"": 50," + "\n" +
@" ""type"": ""PROGRESSIVE_PROFILING""," + "\n" +
@" ""promptText"": ""Please provide the following information.""," + "\n" +
@" ""promptIntervalSeconds"": 3600," + "\n" +
@" ""preventMultiplePromptsPerFlow"": false," + "\n" +
@" ""attributes"": [" + "\n" +
@" {" + "\n" +
@" ""name"": ""mobilePhone""," + "\n" +
@" ""required"": false" + "\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}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions"
method := "POST"
payload := strings.NewReader(`{
"priority": 50,
"type": "PROGRESSIVE_PROFILING",
"promptText": "Please provide the following information.",
"promptIntervalSeconds": 3600,
"preventMultiplePromptsPerFlow": false,
"attributes": [
{
"name": "mobilePhone",
"required": 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))
}
POST /environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}
{
"priority": 50,
"type": "PROGRESSIVE_PROFILING",
"promptText": "Please provide the following information.",
"promptIntervalSeconds": 3600,
"preventMultiplePromptsPerFlow": false,
"attributes": [
{
"name": "mobilePhone",
"required": false
}
]
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"priority\": 50,\n \"type\": \"PROGRESSIVE_PROFILING\",\n \"promptText\": \"Please provide the following information.\",\n \"promptIntervalSeconds\": 3600,\n \"preventMultiplePromptsPerFlow\": false,\n \"attributes\": [\n {\n \"name\": \"mobilePhone\",\n \"required\": false\n }\n ]\n}");
Request request = new Request.Builder()
.url("{{apiPath}}/environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer {{accessToken}}")
.build();
Response response = client.newCall(request).execute();
var settings = {
"url": "{{apiPath}}/environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions",
"method": "POST",
"timeout": 0,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{accessToken}}"
},
"data": JSON.stringify({
"priority": 50,
"type": "PROGRESSIVE_PROFILING",
"promptText": "Please provide the following information.",
"promptIntervalSeconds": 3600,
"preventMultiplePromptsPerFlow": false,
"attributes": [
{
"name": "mobilePhone",
"required": false
}
]
}),
};
$.ajax(settings).done(function (response) {
console.log(response);
});
var request = require('request');
var options = {
'method': 'POST',
'url': '{{apiPath}}/environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions',
'headers': {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{accessToken}}'
},
body: JSON.stringify({
"priority": 50,
"type": "PROGRESSIVE_PROFILING",
"promptText": "Please provide the following information.",
"promptIntervalSeconds": 3600,
"preventMultiplePromptsPerFlow": false,
"attributes": [
{
"name": "mobilePhone",
"required": false
}
]
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{{apiPath}}/environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions"
payload = json.dumps({
"priority": 50,
"type": "PROGRESSIVE_PROFILING",
"promptText": "Please provide the following information.",
"promptIntervalSeconds": 3600,
"preventMultiplePromptsPerFlow": False,
"attributes": [
{
"name": "mobilePhone",
"required": False
}
]
})
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{accessToken}}'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
'follow_redirects' => TRUE
));
$request->setHeader(array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n "priority": 50,\n "type": "PROGRESSIVE_PROFILING",\n "promptText": "Please provide the following information.",\n "promptIntervalSeconds": 3600,\n "preventMultiplePromptsPerFlow": false,\n "attributes": [\n {\n "name": "mobilePhone",\n "required": false\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}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
"priority": 50,
"type": "PROGRESSIVE_PROFILING",
"promptText": "Please provide the following information.",
"promptIntervalSeconds": 3600,
"preventMultiplePromptsPerFlow": false,
"attributes": [
{
"name": "mobilePhone",
"required": false
}
]
})
response = http.request(request)
puts response.read_body
let parameters = "{\n \"priority\": 50,\n \"type\": \"PROGRESSIVE_PROFILING\",\n \"promptText\": \"Please provide the following information.\",\n \"promptIntervalSeconds\": 3600,\n \"preventMultiplePromptsPerFlow\": false,\n \"attributes\": [\n {\n \"name\": \"mobilePhone\",\n \"required\": false\n }\n ]\n}"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/signOnPolicies/{{ProgressiveProfilingPolicyID}}/actions")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
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
201 Created
{
"_links": {
"self": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/signOnPolicies/4aebea3e-6453-47a8-be3c-17d25c342bac/actions/9968ab00-dbfe-4437-9ba5-47031e55f532"
},
"environment": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
},
"signOnPolicy": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/signOnPolicies/4aebea3e-6453-47a8-be3c-17d25c342bac"
}
},
"id": "9968ab00-dbfe-4437-9ba5-47031e55f532",
"environment": {
"id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
},
"type": "PROGRESSIVE_PROFILING",
"signOnPolicy": {
"id": "4aebea3e-6453-47a8-be3c-17d25c342bac"
},
"priority": 50,
"attributes": [
{
"name": "mobilePhone",
"required": false
}
],
"preventMultiplePromptsPerFlow": false,
"promptText": "Please provide the following information.",
"promptIntervalSeconds": 3600
}