Step 7: Create a user
POST {{apiPath}}/environments/{{envID}}/users
This example shows the POST {{apiPath}}/environments/{{envID}}/users operation to create a new user.
In this request:
-
{{envID}}represents your environment ID. -
The request body includes:
-
The population ID that you created in a prior step. The
{{samlPopID}}placeholder variable in the request body represents the population ID. -
email. The unique email address for the new user. -
username. A name for the new user that must be unique within the specified environment. -
type. A value that has no special meaning in PingOne but can be used to categorize or filter users. In this workflow, the value of this property is set toSAMLuser. Any user of this type is assigned membership to the group you created in the previous step.
-
-
The response returns a
Status: 201 createdmessage and shows the new user’s coniguration data. -
The response data includes the user’s
idproperty, which is needed to set the new user’s password in the next step.
Example Request
-
cURL
-
C#
-
Go
-
HTTP
-
Java
-
jQuery
-
NodeJS
-
Python
-
PHP
-
Ruby
-
Swift
curl --location --globoff '{{apiPath}}/environments/{{envID}}/users' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data-raw '{
"email": "my.email@pingidentity.com",
"type": "SAMLuser",
"name": {
"given": "Test",
"family": "SAMLUser"
},
"population": {
"id": "{{samlPopID}}"
},
"username": "saml_user_{{$timestamp}}"
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/users")
{
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" +
@" ""email"": ""my.email@pingidentity.com""," + "\n" +
@" ""type"": ""SAMLuser""," + "\n" +
@" ""name"": {" + "\n" +
@" ""given"": ""Test""," + "\n" +
@" ""family"": ""SAMLUser""" + "\n" +
@" }," + "\n" +
@" ""population"": {" + "\n" +
@" ""id"": ""{{samlPopID}}""" + "\n" +
@" }," + "\n" +
@" ""username"": ""saml_user_{{$timestamp}}""" + "\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}}/users"
method := "POST"
payload := strings.NewReader(`{
"email": "my.email@pingidentity.com",
"type": "SAMLuser",
"name": {
"given": "Test",
"family": "SAMLUser"
},
"population": {
"id": "{{samlPopID}}"
},
"username": "saml_user_{{$timestamp}}"
}`)
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}}/users HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}
{
"email": "my.email@pingidentity.com",
"type": "SAMLuser",
"name": {
"given": "Test",
"family": "SAMLUser"
},
"population": {
"id": "{{samlPopID}}"
},
"username": "saml_user_{{$timestamp}}"
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"email\": \"my.email@pingidentity.com\",\n \"type\": \"SAMLuser\",\n \"name\": {\n \"given\": \"Test\",\n \"family\": \"SAMLUser\"\n },\n \"population\": {\n \"id\": \"{{samlPopID}}\"\n },\n \"username\": \"saml_user_{{$timestamp}}\"\n}");
Request request = new Request.Builder()
.url("{{apiPath}}/environments/{{envID}}/users")
.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}}/users",
"method": "POST",
"timeout": 0,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{accessToken}}"
},
"data": JSON.stringify({
"email": "my.email@pingidentity.com",
"type": "SAMLuser",
"name": {
"given": "Test",
"family": "SAMLUser"
},
"population": {
"id": "{{samlPopID}}"
},
"username": "saml_user_{{$timestamp}}"
}),
};
$.ajax(settings).done(function (response) {
console.log(response);
});
var request = require('request');
var options = {
'method': 'POST',
'url': '{{apiPath}}/environments/{{envID}}/users',
'headers': {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{accessToken}}'
},
body: JSON.stringify({
"email": "my.email@pingidentity.com",
"type": "SAMLuser",
"name": {
"given": "Test",
"family": "SAMLUser"
},
"population": {
"id": "{{samlPopID}}"
},
"username": "saml_user_{{$timestamp}}"
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{{apiPath}}/environments/{{envID}}/users"
payload = json.dumps({
"email": "my.email@pingidentity.com",
"type": "SAMLuser",
"name": {
"given": "Test",
"family": "SAMLUser"
},
"population": {
"id": "{{samlPopID}}"
},
"username": "saml_user_{{$timestamp}}"
})
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}}/users');
$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 "email": "my.email@pingidentity.com",\n "type": "SAMLuser",\n "name": {\n "given": "Test",\n "family": "SAMLUser"\n },\n "population": {\n "id": "{{samlPopID}}"\n },\n "username": "saml_user_{{$timestamp}}"\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}}/users")
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({
"email": "my.email@pingidentity.com",
"type": "SAMLuser",
"name": {
"given": "Test",
"family": "SAMLUser"
},
"population": {
"id": "{{samlPopID}}"
},
"username": "saml_user_{{\$timestamp}}"
})
response = http.request(request)
puts response.read_body
let parameters = "{\n \"email\": \"my.email@pingidentity.com\",\n \"type\": \"SAMLuser\",\n \"name\": {\n \"given\": \"Test\",\n \"family\": \"SAMLUser\"\n },\n \"population\": {\n \"id\": \"{{samlPopID}}\"\n },\n \"username\": \"saml_user_{{$timestamp}}\"\n}"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/users")!,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/users/65b67d41-0296-48fb-9e75-4780fbb7ea31"
},
"environment": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
},
"population": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/populations/01c9a5c5-58af-4b3e-8c79-85052a3391fd"
},
"devices": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31/devices"
},
"roleAssignments": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31/roleAssignments"
},
"password": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31/password"
},
"password.reset": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31/password"
},
"password.set": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31/password"
},
"password.check": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31/password"
},
"password.recover": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31/password"
},
"linkedAccounts": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31/linkedAccounts"
},
"account.sendVerificationCode": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31"
},
"memberOfGroups": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/65b67d41-0296-48fb-9e75-4780fbb7ea31/memberOfGroups"
}
},
"id": "65b67d41-0296-48fb-9e75-4780fbb7ea31",
"environment": {
"id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
},
"account": {
"canAuthenticate": true,
"status": "OK"
},
"createdAt": "2023-05-16T18:02:05.494Z",
"email": "my.email@pingidentity.com",
"enabled": true,
"identityProvider": {
"type": "PING_ONE"
},
"lifecycle": {
"status": "ACCOUNT_OK"
},
"mfaEnabled": false,
"name": {
"given": "Test",
"family": "SAMLUser"
},
"population": {
"id": "01c9a5c5-58af-4b3e-8c79-85052a3391fd"
},
"type": "SAMLuser",
"updatedAt": "2023-05-16T18:02:05.494Z",
"username": "saml_user_1684260125",
"verifyStatus": "NOT_INITIATED"
}