PingOne Platform APIs - Early Access

Update Experience

PUT {{apiPath}}/v1/environments/{{envID}}/experiences/{{experienceID}}

Use PUT {{apiPath}}/v1/environments/{{envID}}/experiences/{{experienceID}} to update the configuration for the specified user experience.

Request Model

Refer to Experiences data model for complete descriptions.

Property

Type

Required

name

String

Required

description

String

Optional

flowType

String

Optional

firstFactor

Object

Required

firstFactor.passwordless

Object

Optional

firstFactor.passwordless.enabled

Boolean

Required

firstFactor.passwordless.usernameFirst

Boolean

Required/Optional

firstFactor.passwordless.passkeyPolicies

Array

Required

firstFactor.passwordless.passkeyPolicies.id

String

Required/Optional

firstFactor.passwordless.passkeyPolicies.type

String

Required/Optional

firstFactor.passkeyOrBioMetric

Object

Required

firstFactor.passkeyOrBioMetric.enabled

Boolean

Required

firstFactor.passkeyOrBioMetric.passkeyPolicies

Array

Required

firstFactor.passkeyOrBioMetric.passkeyPolicies.id

String

Required/Optional

firstFactor.passkeyOrBioMetric.passkeyPolicies.type

String

Required/Optional

firstFactor.identityProviders

Object

Required

firstFactor.identityProviders.enabled

Boolean

Required

firstFactor.identityProviders.socialProviders

Array

Required

firstFactor.identityProviders.socialProviders.id

String

Required/Optional

firstFactor.identityProviders.socialProviders.name

String

Required/Optional

firstFactor.identityProviders.socialProviders.type

String

Required/Optional

firstFactor.rememberMe

Boolean

Optional

firstFactor.sessionTimeOut

Object

Optional

firstFactor.sessionTimeOut.unit

String

Required/Optional

firstFactor.sessionTimeOut.value

String

Required/Optional

mfa

Object

Required

mfa.enabled

Boolean

Required

mfa.enabled.accessPolicies

Array

Required

mfa.enabled.id

String

Required/Optional

mfa.enabled.type

String

Required/Optional

mfa.sessionTimeOut

Object

Optional

mfa.sessionTimeOut.unit

String

Required/Optional

mfa.sessionTimeOut.value

String

Required/Optional

mfa.enrollment

Object

Required

mfa.enrollment.enabled

Boolean

Required

mfa.enrollment.required

Boolean

Required

mfa.enabled.accessPolicies

Object[]

Required

mfa.enabled.accessPolicies.id

String

Required/Optional

mfa.enabled.accessPolicies.type

String

Required/Optional

accountRecovery

Object

Required

accountRecovery.enabled

Boolean

Required

accountRecovery.enabled.accessPolicies

Object[]

Required

accountRecovery.enabled.accessPolicies.id

String

Required/Optional

accountRecovery.enabled.accessPolicies.type

String

Required/Optional

registration

Object

Required

registration.enabled

Boolean

Required

registration.enrollment

Object

Required

registration.enrollment.enabled

Boolean

Required

registration.enrollment.required

Boolean

Required

registration.enrollment.policies

Object[]

Required

registration.enrollment.policies.id

String

Required/Optional

registration.enrollment.policies.type

String

Required/Optional

registration.population

Object

Required/Optional

registration.population.id

String

Required/Optional

registration.botDetection

Object

Required

registration.botDetection.enabled

Boolean

Required

registration.botDetection.enabled.accessPolicies

Object[]

Required

registration.botDetection.enabled.accessPolicies.id

String

Required/Optional

registration.botDetection.enabled.accessPolicies.type

String

Required/Optional

registration.attributeList

Object[]

Required

registration.attributeList.name

String

Optional

registration.attributeList.required

Boolean

Required

registration.requireAccountVerification

Boolean

Required

registration.termsOfService

Object

Required

registration.termsOfService.enabled

Boolean

Required

registration.termsOfService.agreementPolicy

Object

Required

registration.termsOfService.agreementPolicy.id

String

Required/Optional

registration.theme

Object

Required

registration.theme.id

String

Required

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
  "flowType": "USERNAME_AND_PASSWORD",
  "name": "userPasswordFlow2",
  "description": "",
  "firstFactor": {
    "passwordless": {
      "enabled": false,
      "usernameFirst": false,
      "passkeyPolicies": []
    },
    "passkeyOrBioMetric": {
      "enabled": false,
      "passkeyPolicies": []
    },
    "identityProviders": {
      "enabled": false,
      "socialProviders": []
    },
    "rememberMe": true,
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "8"
    }
  },
  "mfa": {
    "enabled": true,
    "accessPolicies": [
      {
        "id": "{{deviceAuthPolicy}}",
        "type": "STANDARD_MFA"
      }
    ],
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "128"
    },
    "enrollment": {
      "enabled": false,
      "required": false,
      "policies": [
        {
          "id": "policy-id",
          "type": "STANDARD_MFA"
        }
      ]
    }
  },
  "accountRecovery": {
    "enabled": false,
    "accessPolicies": []
  },
  "registration": {
    "enabled": true,
    "population": {
      "id": "{{popID}}"
    },
    "attributeList": [
      {
        "name": "email",
        "required": true
      },
      {
        "name": "password",
        "required": true
      }
    ],
    "requireAccountVerification": true,
    "botDetection": {
      "enabled": false,
      "accessPolicies": []
    },
    "termsOfService": {
      "enabled": true,
      "agreementPolicy": {
        "id": "{{agreementID}}"
      }
    }
  },
  "theme": {
    "id": "{{themeID}}"
  }
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff --request PUT '{{apiPath}}/v1/environments/{{envID}}/experiences/{{experienceID}}' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
  "flowType": "USERNAME_AND_PASSWORD",
  "name": "userPasswordFlow2",
  "description": "",
  "firstFactor": {
    "passwordless": {
      "enabled": false,
      "usernameFirst": false,
      "passkeyPolicies": []
    },
    "passkeyOrBioMetric": {
      "enabled": false,
      "passkeyPolicies": []
    },
    "identityProviders": {
      "enabled": false,
      "socialProviders": []
    },
    "rememberMe": true,
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "8"
    }
  },
  "mfa": {
    "enabled": true,
    "accessPolicies": [
      {
        "id": "{{deviceAuthPolicy}}",
        "type": "STANDARD_MFA"
      }
    ],
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "128"
    },
    "enrollment": {
      "enabled": false,
      "required": false,
      "policies": [
        {
          "id": "policy-id",
          "type": "STANDARD_MFA"
        }
      ]
    }
  },
  "accountRecovery": {
    "enabled": false,
    "accessPolicies": []
  },
  "registration": {
    "enabled": true,
    "population": {
      "id": "{{popID}}"
    },
    "attributeList": [
      {
        "name": "email",
        "required": true
      },
      {
        "name": "password",
        "required": true
      }
    ],
    "requireAccountVerification": true,
    "botDetection": {
      "enabled": false,
      "accessPolicies": []
    },
    "termsOfService": {
      "enabled": true,
      "agreementPolicy": {
        "id": "{{agreementID}}"
      }
    }
  },
  "theme": {
    "id": "{{themeID}}"
  }
}'
var options = new RestClientOptions("{{apiPath}}/v1/environments/{{envID}}/experiences/{{experienceID}}")
{
  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" +
@"  ""flowType"": ""USERNAME_AND_PASSWORD""," + "\n" +
@"  ""name"": ""userPasswordFlow2""," + "\n" +
@"  ""description"": """"," + "\n" +
@"  ""firstFactor"": {" + "\n" +
@"    ""passwordless"": {" + "\n" +
@"      ""enabled"": false," + "\n" +
@"      ""usernameFirst"": false," + "\n" +
@"      ""passkeyPolicies"": []" + "\n" +
@"    }," + "\n" +
@"    ""passkeyOrBioMetric"": {" + "\n" +
@"      ""enabled"": false," + "\n" +
@"      ""passkeyPolicies"": []" + "\n" +
@"    }," + "\n" +
@"    ""identityProviders"": {" + "\n" +
@"      ""enabled"": false," + "\n" +
@"      ""socialProviders"": []" + "\n" +
@"    }," + "\n" +
@"    ""rememberMe"": true," + "\n" +
@"    ""sessionTimeout"": {" + "\n" +
@"      ""enabled"": true," + "\n" +
@"      ""unit"": ""HH""," + "\n" +
@"      ""value"": ""8""" + "\n" +
@"    }" + "\n" +
@"  }," + "\n" +
@"  ""mfa"": {" + "\n" +
@"    ""enabled"": true," + "\n" +
@"    ""accessPolicies"": [" + "\n" +
@"      {" + "\n" +
@"        ""id"": ""{{deviceAuthPolicy}}""," + "\n" +
@"        ""type"": ""STANDARD_MFA""" + "\n" +
@"      }" + "\n" +
@"    ]," + "\n" +
@"    ""sessionTimeout"": {" + "\n" +
@"      ""enabled"": true," + "\n" +
@"      ""unit"": ""HH""," + "\n" +
@"      ""value"": ""128""" + "\n" +
@"    }," + "\n" +
@"    ""enrollment"": {" + "\n" +
@"      ""enabled"": false," + "\n" +
@"      ""required"": false," + "\n" +
@"      ""policies"": [" + "\n" +
@"        {" + "\n" +
@"          ""id"": ""policy-id""," + "\n" +
@"          ""type"": ""STANDARD_MFA""" + "\n" +
@"        }" + "\n" +
@"      ]" + "\n" +
@"    }" + "\n" +
@"  }," + "\n" +
@"  ""accountRecovery"": {" + "\n" +
@"    ""enabled"": false," + "\n" +
@"    ""accessPolicies"": []" + "\n" +
@"  }," + "\n" +
@"  ""registration"": {" + "\n" +
@"    ""enabled"": true," + "\n" +
@"    ""population"": {" + "\n" +
@"      ""id"": ""{{popID}}""" + "\n" +
@"    }," + "\n" +
@"    ""attributeList"": [" + "\n" +
@"      {" + "\n" +
@"        ""name"": ""email""," + "\n" +
@"        ""required"": true" + "\n" +
@"      }," + "\n" +
@"      {" + "\n" +
@"        ""name"": ""password""," + "\n" +
@"        ""required"": true" + "\n" +
@"      }" + "\n" +
@"    ]," + "\n" +
@"    ""requireAccountVerification"": true," + "\n" +
@"    ""botDetection"": {" + "\n" +
@"      ""enabled"": false," + "\n" +
@"      ""accessPolicies"": []" + "\n" +
@"    }," + "\n" +
@"    ""termsOfService"": {" + "\n" +
@"      ""enabled"": true," + "\n" +
@"      ""agreementPolicy"": {" + "\n" +
@"        ""id"": ""{{agreementID}}""" + "\n" +
@"      }" + "\n" +
@"    }" + "\n" +
@"  }," + "\n" +
@"  ""theme"": {" + "\n" +
@"    ""id"": ""{{themeID}}""" + "\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}}/v1/environments/{{envID}}/experiences/{{experienceID}}"
  method := "PUT"

  payload := strings.NewReader(`{
  "flowType": "USERNAME_AND_PASSWORD",
  "name": "userPasswordFlow2",
  "description": "",
  "firstFactor": {
    "passwordless": {
      "enabled": false,
      "usernameFirst": false,
      "passkeyPolicies": []
    },
    "passkeyOrBioMetric": {
      "enabled": false,
      "passkeyPolicies": []
    },
    "identityProviders": {
      "enabled": false,
      "socialProviders": []
    },
    "rememberMe": true,
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "8"
    }
  },
  "mfa": {
    "enabled": true,
    "accessPolicies": [
      {
        "id": "{{deviceAuthPolicy}}",
        "type": "STANDARD_MFA"
      }
    ],
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "128"
    },
    "enrollment": {
      "enabled": false,
      "required": false,
      "policies": [
        {
          "id": "policy-id",
          "type": "STANDARD_MFA"
        }
      ]
    }
  },
  "accountRecovery": {
    "enabled": false,
    "accessPolicies": []
  },
  "registration": {
    "enabled": true,
    "population": {
      "id": "{{popID}}"
    },
    "attributeList": [
      {
        "name": "email",
        "required": true
      },
      {
        "name": "password",
        "required": true
      }
    ],
    "requireAccountVerification": true,
    "botDetection": {
      "enabled": false,
      "accessPolicies": []
    },
    "termsOfService": {
      "enabled": true,
      "agreementPolicy": {
        "id": "{{agreementID}}"
      }
    }
  },
  "theme": {
    "id": "{{themeID}}"
  }
}`)

  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 /v1/environments/{{envID}}/experiences/{{experienceID}} HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
  "flowType": "USERNAME_AND_PASSWORD",
  "name": "userPasswordFlow2",
  "description": "",
  "firstFactor": {
    "passwordless": {
      "enabled": false,
      "usernameFirst": false,
      "passkeyPolicies": []
    },
    "passkeyOrBioMetric": {
      "enabled": false,
      "passkeyPolicies": []
    },
    "identityProviders": {
      "enabled": false,
      "socialProviders": []
    },
    "rememberMe": true,
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "8"
    }
  },
  "mfa": {
    "enabled": true,
    "accessPolicies": [
      {
        "id": "{{deviceAuthPolicy}}",
        "type": "STANDARD_MFA"
      }
    ],
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "128"
    },
    "enrollment": {
      "enabled": false,
      "required": false,
      "policies": [
        {
          "id": "policy-id",
          "type": "STANDARD_MFA"
        }
      ]
    }
  },
  "accountRecovery": {
    "enabled": false,
    "accessPolicies": []
  },
  "registration": {
    "enabled": true,
    "population": {
      "id": "{{popID}}"
    },
    "attributeList": [
      {
        "name": "email",
        "required": true
      },
      {
        "name": "password",
        "required": true
      }
    ],
    "requireAccountVerification": true,
    "botDetection": {
      "enabled": false,
      "accessPolicies": []
    },
    "termsOfService": {
      "enabled": true,
      "agreementPolicy": {
        "id": "{{agreementID}}"
      }
    }
  },
  "theme": {
    "id": "{{themeID}}"
  }
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"flowType\": \"USERNAME_AND_PASSWORD\",\n  \"name\": \"userPasswordFlow2\",\n  \"description\": \"\",\n  \"firstFactor\": {\n    \"passwordless\": {\n      \"enabled\": false,\n      \"usernameFirst\": false,\n      \"passkeyPolicies\": []\n    },\n    \"passkeyOrBioMetric\": {\n      \"enabled\": false,\n      \"passkeyPolicies\": []\n    },\n    \"identityProviders\": {\n      \"enabled\": false,\n      \"socialProviders\": []\n    },\n    \"rememberMe\": true,\n    \"sessionTimeout\": {\n      \"enabled\": true,\n      \"unit\": \"HH\",\n      \"value\": \"8\"\n    }\n  },\n  \"mfa\": {\n    \"enabled\": true,\n    \"accessPolicies\": [\n      {\n        \"id\": \"{{deviceAuthPolicy}}\",\n        \"type\": \"STANDARD_MFA\"\n      }\n    ],\n    \"sessionTimeout\": {\n      \"enabled\": true,\n      \"unit\": \"HH\",\n      \"value\": \"128\"\n    },\n    \"enrollment\": {\n      \"enabled\": false,\n      \"required\": false,\n      \"policies\": [\n        {\n          \"id\": \"policy-id\",\n          \"type\": \"STANDARD_MFA\"\n        }\n      ]\n    }\n  },\n  \"accountRecovery\": {\n    \"enabled\": false,\n    \"accessPolicies\": []\n  },\n  \"registration\": {\n    \"enabled\": true,\n    \"population\": {\n      \"id\": \"{{popID}}\"\n    },\n    \"attributeList\": [\n      {\n        \"name\": \"email\",\n        \"required\": true\n      },\n      {\n        \"name\": \"password\",\n        \"required\": true\n      }\n    ],\n    \"requireAccountVerification\": true,\n    \"botDetection\": {\n      \"enabled\": false,\n      \"accessPolicies\": []\n    },\n    \"termsOfService\": {\n      \"enabled\": true,\n      \"agreementPolicy\": {\n        \"id\": \"{{agreementID}}\"\n      }\n    }\n  },\n  \"theme\": {\n    \"id\": \"{{themeID}}\"\n  }\n}\n");
Request request = new Request.Builder()
  .url("{{apiPath}}/v1/environments/{{envID}}/experiences/{{experienceID}}")
  .method("PUT", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{apiPath}}/v1/environments/{{envID}}/experiences/{{experienceID}}",
  "method": "PUT",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "flowType": "USERNAME_AND_PASSWORD",
    "name": "userPasswordFlow2",
    "description": "",
    "firstFactor": {
      "passwordless": {
        "enabled": false,
        "usernameFirst": false,
        "passkeyPolicies": []
      },
      "passkeyOrBioMetric": {
        "enabled": false,
        "passkeyPolicies": []
      },
      "identityProviders": {
        "enabled": false,
        "socialProviders": []
      },
      "rememberMe": true,
      "sessionTimeout": {
        "enabled": true,
        "unit": "HH",
        "value": "8"
      }
    },
    "mfa": {
      "enabled": true,
      "accessPolicies": [
        {
          "id": "{{deviceAuthPolicy}}",
          "type": "STANDARD_MFA"
        }
      ],
      "sessionTimeout": {
        "enabled": true,
        "unit": "HH",
        "value": "128"
      },
      "enrollment": {
        "enabled": false,
        "required": false,
        "policies": [
          {
            "id": "policy-id",
            "type": "STANDARD_MFA"
          }
        ]
      }
    },
    "accountRecovery": {
      "enabled": false,
      "accessPolicies": []
    },
    "registration": {
      "enabled": true,
      "population": {
        "id": "{{popID}}"
      },
      "attributeList": [
        {
          "name": "email",
          "required": true
        },
        {
          "name": "password",
          "required": true
        }
      ],
      "requireAccountVerification": true,
      "botDetection": {
        "enabled": false,
        "accessPolicies": []
      },
      "termsOfService": {
        "enabled": true,
        "agreementPolicy": {
          "id": "{{agreementID}}"
        }
      }
    },
    "theme": {
      "id": "{{themeID}}"
    }
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'PUT',
  'url': '{{apiPath}}/v1/environments/{{envID}}/experiences/{{experienceID}}',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "flowType": "USERNAME_AND_PASSWORD",
    "name": "userPasswordFlow2",
    "description": "",
    "firstFactor": {
      "passwordless": {
        "enabled": false,
        "usernameFirst": false,
        "passkeyPolicies": []
      },
      "passkeyOrBioMetric": {
        "enabled": false,
        "passkeyPolicies": []
      },
      "identityProviders": {
        "enabled": false,
        "socialProviders": []
      },
      "rememberMe": true,
      "sessionTimeout": {
        "enabled": true,
        "unit": "HH",
        "value": "8"
      }
    },
    "mfa": {
      "enabled": true,
      "accessPolicies": [
        {
          "id": "{{deviceAuthPolicy}}",
          "type": "STANDARD_MFA"
        }
      ],
      "sessionTimeout": {
        "enabled": true,
        "unit": "HH",
        "value": "128"
      },
      "enrollment": {
        "enabled": false,
        "required": false,
        "policies": [
          {
            "id": "policy-id",
            "type": "STANDARD_MFA"
          }
        ]
      }
    },
    "accountRecovery": {
      "enabled": false,
      "accessPolicies": []
    },
    "registration": {
      "enabled": true,
      "population": {
        "id": "{{popID}}"
      },
      "attributeList": [
        {
          "name": "email",
          "required": true
        },
        {
          "name": "password",
          "required": true
        }
      ],
      "requireAccountVerification": true,
      "botDetection": {
        "enabled": false,
        "accessPolicies": []
      },
      "termsOfService": {
        "enabled": true,
        "agreementPolicy": {
          "id": "{{agreementID}}"
        }
      }
    },
    "theme": {
      "id": "{{themeID}}"
    }
  })

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

url = "{{apiPath}}/v1/environments/{{envID}}/experiences/{{experienceID}}"

payload = json.dumps({
  "flowType": "USERNAME_AND_PASSWORD",
  "name": "userPasswordFlow2",
  "description": "",
  "firstFactor": {
    "passwordless": {
      "enabled": False,
      "usernameFirst": False,
      "passkeyPolicies": []
    },
    "passkeyOrBioMetric": {
      "enabled": False,
      "passkeyPolicies": []
    },
    "identityProviders": {
      "enabled": False,
      "socialProviders": []
    },
    "rememberMe": True,
    "sessionTimeout": {
      "enabled": True,
      "unit": "HH",
      "value": "8"
    }
  },
  "mfa": {
    "enabled": True,
    "accessPolicies": [
      {
        "id": "{{deviceAuthPolicy}}",
        "type": "STANDARD_MFA"
      }
    ],
    "sessionTimeout": {
      "enabled": True,
      "unit": "HH",
      "value": "128"
    },
    "enrollment": {
      "enabled": False,
      "required": False,
      "policies": [
        {
          "id": "policy-id",
          "type": "STANDARD_MFA"
        }
      ]
    }
  },
  "accountRecovery": {
    "enabled": False,
    "accessPolicies": []
  },
  "registration": {
    "enabled": True,
    "population": {
      "id": "{{popID}}"
    },
    "attributeList": [
      {
        "name": "email",
        "required": True
      },
      {
        "name": "password",
        "required": True
      }
    ],
    "requireAccountVerification": True,
    "botDetection": {
      "enabled": False,
      "accessPolicies": []
    },
    "termsOfService": {
      "enabled": True,
      "agreementPolicy": {
        "id": "{{agreementID}}"
      }
    }
  },
  "theme": {
    "id": "{{themeID}}"
  }
})
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}}/v1/environments/{{envID}}/experiences/{{experienceID}}');
$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  "flowType": "USERNAME_AND_PASSWORD",\n  "name": "userPasswordFlow2",\n  "description": "",\n  "firstFactor": {\n    "passwordless": {\n      "enabled": false,\n      "usernameFirst": false,\n      "passkeyPolicies": []\n    },\n    "passkeyOrBioMetric": {\n      "enabled": false,\n      "passkeyPolicies": []\n    },\n    "identityProviders": {\n      "enabled": false,\n      "socialProviders": []\n    },\n    "rememberMe": true,\n    "sessionTimeout": {\n      "enabled": true,\n      "unit": "HH",\n      "value": "8"\n    }\n  },\n  "mfa": {\n    "enabled": true,\n    "accessPolicies": [\n      {\n        "id": "{{deviceAuthPolicy}}",\n        "type": "STANDARD_MFA"\n      }\n    ],\n    "sessionTimeout": {\n      "enabled": true,\n      "unit": "HH",\n      "value": "128"\n    },\n    "enrollment": {\n      "enabled": false,\n      "required": false,\n      "policies": [\n        {\n          "id": "policy-id",\n          "type": "STANDARD_MFA"\n        }\n      ]\n    }\n  },\n  "accountRecovery": {\n    "enabled": false,\n    "accessPolicies": []\n  },\n  "registration": {\n    "enabled": true,\n    "population": {\n      "id": "{{popID}}"\n    },\n    "attributeList": [\n      {\n        "name": "email",\n        "required": true\n      },\n      {\n        "name": "password",\n        "required": true\n      }\n    ],\n    "requireAccountVerification": true,\n    "botDetection": {\n      "enabled": false,\n      "accessPolicies": []\n    },\n    "termsOfService": {\n      "enabled": true,\n      "agreementPolicy": {\n        "id": "{{agreementID}}"\n      }\n    }\n  },\n  "theme": {\n    "id": "{{themeID}}"\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}}/v1/environments/{{envID}}/experiences/{{experienceID}}")

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({
  "flowType": "USERNAME_AND_PASSWORD",
  "name": "userPasswordFlow2",
  "description": "",
  "firstFactor": {
    "passwordless": {
      "enabled": false,
      "usernameFirst": false,
      "passkeyPolicies": []
    },
    "passkeyOrBioMetric": {
      "enabled": false,
      "passkeyPolicies": []
    },
    "identityProviders": {
      "enabled": false,
      "socialProviders": []
    },
    "rememberMe": true,
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "8"
    }
  },
  "mfa": {
    "enabled": true,
    "accessPolicies": [
      {
        "id": "{{deviceAuthPolicy}}",
        "type": "STANDARD_MFA"
      }
    ],
    "sessionTimeout": {
      "enabled": true,
      "unit": "HH",
      "value": "128"
    },
    "enrollment": {
      "enabled": false,
      "required": false,
      "policies": [
        {
          "id": "policy-id",
          "type": "STANDARD_MFA"
        }
      ]
    }
  },
  "accountRecovery": {
    "enabled": false,
    "accessPolicies": []
  },
  "registration": {
    "enabled": true,
    "population": {
      "id": "{{popID}}"
    },
    "attributeList": [
      {
        "name": "email",
        "required": true
      },
      {
        "name": "password",
        "required": true
      }
    ],
    "requireAccountVerification": true,
    "botDetection": {
      "enabled": false,
      "accessPolicies": []
    },
    "termsOfService": {
      "enabled": true,
      "agreementPolicy": {
        "id": "{{agreementID}}"
      }
    }
  },
  "theme": {
    "id": "{{themeID}}"
  }
})

response = http.request(request)
puts response.read_body
let parameters = "{\n  \"flowType\": \"USERNAME_AND_PASSWORD\",\n  \"name\": \"userPasswordFlow2\",\n  \"description\": \"\",\n  \"firstFactor\": {\n    \"passwordless\": {\n      \"enabled\": false,\n      \"usernameFirst\": false,\n      \"passkeyPolicies\": []\n    },\n    \"passkeyOrBioMetric\": {\n      \"enabled\": false,\n      \"passkeyPolicies\": []\n    },\n    \"identityProviders\": {\n      \"enabled\": false,\n      \"socialProviders\": []\n    },\n    \"rememberMe\": true,\n    \"sessionTimeout\": {\n      \"enabled\": true,\n      \"unit\": \"HH\",\n      \"value\": \"8\"\n    }\n  },\n  \"mfa\": {\n    \"enabled\": true,\n    \"accessPolicies\": [\n      {\n        \"id\": \"{{deviceAuthPolicy}}\",\n        \"type\": \"STANDARD_MFA\"\n      }\n    ],\n    \"sessionTimeout\": {\n      \"enabled\": true,\n      \"unit\": \"HH\",\n      \"value\": \"128\"\n    },\n    \"enrollment\": {\n      \"enabled\": false,\n      \"required\": false,\n      \"policies\": [\n        {\n          \"id\": \"policy-id\",\n          \"type\": \"STANDARD_MFA\"\n        }\n      ]\n    }\n  },\n  \"accountRecovery\": {\n    \"enabled\": false,\n    \"accessPolicies\": []\n  },\n  \"registration\": {\n    \"enabled\": true,\n    \"population\": {\n      \"id\": \"{{popID}}\"\n    },\n    \"attributeList\": [\n      {\n        \"name\": \"email\",\n        \"required\": true\n      },\n      {\n        \"name\": \"password\",\n        \"required\": true\n      }\n    ],\n    \"requireAccountVerification\": true,\n    \"botDetection\": {\n      \"enabled\": false,\n      \"accessPolicies\": []\n    },\n    \"termsOfService\": {\n      \"enabled\": true,\n      \"agreementPolicy\": {\n        \"id\": \"{{agreementID}}\"\n      }\n    }\n  },\n  \"theme\": {\n    \"id\": \"{{themeID}}\"\n  }\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/v1/environments/{{envID}}/experiences/{{experienceID}}")!,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/experiences/95cecb81-55f7-48b2-a680-8f263540bb88"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        },
        "theme": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/themes/5ab94557-59c3-4afc-bbf6-046444bd04b8"
        },
        "mfa.accessPolicies.0": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/deviceAuthenticationPolicies/f3ebf6b8-9902-4421-af59-54b1b99969fa"
        },
        "mfa.enrollment.policies.0": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/deviceAuthenticationPolicies/policy-id"
        },
        "population": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/populations/89a7de36-c2ce-48d6-b453-9d7a7dd4dc3a"
        },
        "termsOfServiceAgreement": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/agreements/363ef235-f6fe-4bc7-ae3d-63217482f57f"
        }
    },
    "id": "95cecb81-55f7-48b2-a680-8f263540bb88",
    "name": "userPasswordFlow2",
    "description": "",
    "flowType": "USERNAME_AND_PASSWORD",
    "firstFactor": {
        "passwordless": {
            "enabled": false,
            "usernameFirst": false,
            "passkeyPolicies": []
        },
        "passkeyOrBioMetric": {
            "enabled": false,
            "passkeyPolicies": []
        },
        "identityProviders": {
            "enabled": false,
            "socialProviders": []
        },
        "rememberMe": true,
        "sessionTimeout": {
            "unit": "HH",
            "value": "8",
            "enabled": true
        }
    },
    "mfa": {
        "enabled": true,
        "accessPolicies": [
            {
                "id": "f3ebf6b8-9902-4421-af59-54b1b99969fa",
                "type": "STANDARD_MFA"
            }
        ],
        "sessionTimeout": {
            "unit": "HH",
            "value": "128",
            "enabled": true
        },
        "enrollment": {
            "enabled": false,
            "required": false,
            "policies": [
                {
                    "id": "policy-id",
                    "type": "STANDARD_MFA"
                }
            ]
        }
    },
    "accountRecovery": {
        "enabled": false,
        "accessPolicies": []
    },
    "registration": {
        "enabled": true,
        "attributeList": [
            {
                "name": "email",
                "required": true
            },
            {
                "name": "password",
                "required": true
            }
        ],
        "botDetection": {
            "enabled": false,
            "accessPolicies": []
        },
        "termsOfService": {
            "enabled": true,
            "agreementPolicy": {
                "id": "363ef235-f6fe-4bc7-ae3d-63217482f57f"
            }
        },
        "requireAccountVerification": true,
        "population": {
            "id": "89a7de36-c2ce-48d6-b453-9d7a7dd4dc3a"
        }
    },
    "theme": {
        "id": "5ab94557-59c3-4afc-bbf6-046444bd04b8"
    },
    "createdAt": "2026-05-11T11:40:55.844Z",
    "updatedAt": "2026-05-11T11:59:00.957923026Z"
}