PingOne Platform APIs

Create Session

 

POST {{apiPath}}/environments/{{envID}}/sessions

Use POST {{apiPath}}/environments/{{envID}}/sessions to create a new session. Unless you specify a token value, you’ll not be able to use Read Session By Session Token, Update Session By Session Token, or Delete Session By Session Token.

Prerequisites

  • Refer to Sessions for important overview information.

Request Model

For complete property descriptions, refer to Sessions data model.

If user.id isn’t specified, the lastSignOn object is null, and any values assigned here are ignored.

Property Type Required?

activeAt

Date

Required

id

String

Required

idleTimeoutInMinutes

Integer

Optional (POST)

lastSignOn

Object

Required

lastSignOn.authenticators

String[]

Required

lastSignOn.remoteIp

String

Required

lastSignOn.withAuthenticator

Map

Required

lastSignOn.withAuthenticator.authenticator

String

Required

lastSignOn.withAuthenticator.authenticator.at

Date

Required

lastSignOn.withAuthenticator.authenticator.policy

Object

Required

lastSignOn.withAuthenticator.authenticator.policy.id

String

Required

lastSignOn.withAuthenticator.authenticator.policy.type

String

Required

token

String

Optional

user.id

String

Optional

userAgent

String

Required

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "activeAt": "{{$isoTimestamp}}",
    "idleTimeoutInMinutes": "144000",
    "lastSignOn": {
        "authenticators": [
            "pwd"
        ],
        "remoteIp": "174.1.62.19",
        "withAuthenticator": {
            "pwd": {
                "at": "2022-08-17T01:21:30.116Z",
                "policy": {
                    "id": "{{passwordPolicyID}}",
                    "type": "PINGONE"
                }
            }
        }
    },
    "token": "{{token}}",
    "user": {
        "id": "{{userID}}"
    },
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0"
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{apiPath}}/environments/{{envID}}/sessions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "activeAt": "{{$isoTimestamp}}",
    "idleTimeoutInMinutes": "144000",
    "lastSignOn": {
        "authenticators": [
            "pwd"
        ],
        "remoteIp": "174.1.62.19",
        "withAuthenticator": {
            "pwd": {
                "at": "2022-08-17T01:21:30.116Z",
                "policy": {
                    "id": "{{passwordPolicyID}}",
                    "type": "PINGONE"
                }
            }
        }
    },
    "token": "{{token}}",
    "user": {
        "id": "{{userID}}"
    },
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0"
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/sessions")
{
  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" +
@"    ""activeAt"": ""{{$isoTimestamp}}""," + "\n" +
@"    ""idleTimeoutInMinutes"": ""144000""," + "\n" +
@"    ""lastSignOn"": {" + "\n" +
@"        ""authenticators"": [" + "\n" +
@"            ""pwd""" + "\n" +
@"        ]," + "\n" +
@"        ""remoteIp"": ""174.1.62.19""," + "\n" +
@"        ""withAuthenticator"": {" + "\n" +
@"            ""pwd"": {" + "\n" +
@"                ""at"": ""2022-08-17T01:21:30.116Z""," + "\n" +
@"                ""policy"": {" + "\n" +
@"                    ""id"": ""{{passwordPolicyID}}""," + "\n" +
@"                    ""type"": ""PINGONE""" + "\n" +
@"                }" + "\n" +
@"            }" + "\n" +
@"        }" + "\n" +
@"    }," + "\n" +
@"    ""token"": ""{{token}}""," + "\n" +
@"    ""user"": {" + "\n" +
@"        ""id"": ""{{userID}}""" + "\n" +
@"    }," + "\n" +
@"    ""userAgent"": ""Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0""" + "\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}}/sessions"
  method := "POST"

  payload := strings.NewReader(`{
    "activeAt": "{{$isoTimestamp}}",
    "idleTimeoutInMinutes": "144000",
    "lastSignOn": {
        "authenticators": [
            "pwd"
        ],
        "remoteIp": "174.1.62.19",
        "withAuthenticator": {
            "pwd": {
                "at": "2022-08-17T01:21:30.116Z",
                "policy": {
                    "id": "{{passwordPolicyID}}",
                    "type": "PINGONE"
                }
            }
        }
    },
    "token": "{{token}}",
    "user": {
        "id": "{{userID}}"
    },
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0"
}`)

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

{
    "activeAt": "{{$isoTimestamp}}",
    "idleTimeoutInMinutes": "144000",
    "lastSignOn": {
        "authenticators": [
            "pwd"
        ],
        "remoteIp": "174.1.62.19",
        "withAuthenticator": {
            "pwd": {
                "at": "2022-08-17T01:21:30.116Z",
                "policy": {
                    "id": "{{passwordPolicyID}}",
                    "type": "PINGONE"
                }
            }
        }
    },
    "token": "{{token}}",
    "user": {
        "id": "{{userID}}"
    },
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0"
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"activeAt\": \"{{$isoTimestamp}}\",\n    \"idleTimeoutInMinutes\": \"144000\",\n    \"lastSignOn\": {\n        \"authenticators\": [\n            \"pwd\"\n        ],\n        \"remoteIp\": \"174.1.62.19\",\n        \"withAuthenticator\": {\n            \"pwd\": {\n                \"at\": \"2022-08-17T01:21:30.116Z\",\n                \"policy\": {\n                    \"id\": \"{{passwordPolicyID}}\",\n                    \"type\": \"PINGONE\"\n                }\n            }\n        }\n    },\n    \"token\": \"{{token}}\",\n    \"user\": {\n        \"id\": \"{{userID}}\"\n    },\n    \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0\"\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/sessions")
  .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}}/sessions",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "activeAt": "{{$isoTimestamp}}",
    "idleTimeoutInMinutes": "144000",
    "lastSignOn": {
      "authenticators": [
        "pwd"
      ],
      "remoteIp": "174.1.62.19",
      "withAuthenticator": {
        "pwd": {
          "at": "2022-08-17T01:21:30.116Z",
          "policy": {
            "id": "{{passwordPolicyID}}",
            "type": "PINGONE"
          }
        }
      }
    },
    "token": "{{token}}",
    "user": {
      "id": "{{userID}}"
    },
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0"
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/environments/{{envID}}/sessions',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "activeAt": "{{$isoTimestamp}}",
    "idleTimeoutInMinutes": "144000",
    "lastSignOn": {
      "authenticators": [
        "pwd"
      ],
      "remoteIp": "174.1.62.19",
      "withAuthenticator": {
        "pwd": {
          "at": "2022-08-17T01:21:30.116Z",
          "policy": {
            "id": "{{passwordPolicyID}}",
            "type": "PINGONE"
          }
        }
      }
    },
    "token": "{{token}}",
    "user": {
      "id": "{{userID}}"
    },
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0"
  })

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

url = "{{apiPath}}/environments/{{envID}}/sessions"

payload = json.dumps({
  "activeAt": "{{$isoTimestamp}}",
  "idleTimeoutInMinutes": "144000",
  "lastSignOn": {
    "authenticators": [
      "pwd"
    ],
    "remoteIp": "174.1.62.19",
    "withAuthenticator": {
      "pwd": {
        "at": "2022-08-17T01:21:30.116Z",
        "policy": {
          "id": "{{passwordPolicyID}}",
          "type": "PINGONE"
        }
      }
    }
  },
  "token": "{{token}}",
  "user": {
    "id": "{{userID}}"
  },
  "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0"
})
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}}/sessions');
$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    "activeAt": "{{$isoTimestamp}}",\n    "idleTimeoutInMinutes": "144000",\n    "lastSignOn": {\n        "authenticators": [\n            "pwd"\n        ],\n        "remoteIp": "174.1.62.19",\n        "withAuthenticator": {\n            "pwd": {\n                "at": "2022-08-17T01:21:30.116Z",\n                "policy": {\n                    "id": "{{passwordPolicyID}}",\n                    "type": "PINGONE"\n                }\n            }\n        }\n    },\n    "token": "{{token}}",\n    "user": {\n        "id": "{{userID}}"\n    },\n    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0"\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}}/sessions")

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({
  "activeAt": "{{\$isoTimestamp}}",
  "idleTimeoutInMinutes": "144000",
  "lastSignOn": {
    "authenticators": [
      "pwd"
    ],
    "remoteIp": "174.1.62.19",
    "withAuthenticator": {
      "pwd": {
        "at": "2022-08-17T01:21:30.116Z",
        "policy": {
          "id": "{{passwordPolicyID}}",
          "type": "PINGONE"
        }
      }
    }
  },
  "token": "{{token}}",
  "user": {
    "id": "{{userID}}"
  },
  "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0"
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"activeAt\": \"{{$isoTimestamp}}\",\n    \"idleTimeoutInMinutes\": \"144000\",\n    \"lastSignOn\": {\n        \"authenticators\": [\n            \"pwd\"\n        ],\n        \"remoteIp\": \"174.1.62.19\",\n        \"withAuthenticator\": {\n            \"pwd\": {\n                \"at\": \"2022-08-17T01:21:30.116Z\",\n                \"policy\": {\n                    \"id\": \"{{passwordPolicyID}}\",\n                    \"type\": \"PINGONE\"\n                }\n            }\n        }\n    },\n    \"token\": \"{{token}}\",\n    \"user\": {\n        \"id\": \"{{userID}}\"\n    },\n    \"userAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/sessions")!,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/sessions/48650856-2bab-4436-856b-2e6e6e6ae3f9"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        },
        "user": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/users/07e1ee43-9f56-4254-8cfb-1709b5ea8e24"
        }
    },
    "id": "48650856-2bab-4436-856b-2e6e6e6ae3f9",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "user": {
        "id": "07e1ee43-9f56-4254-8cfb-1709b5ea8e24"
    },
    "createdAt": "2022-10-03T17:06:43.071Z",
    "activeAt": "2022-08-17T01:21:30.117Z",
    "idleTimeoutInMinutes": 144000,
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0",
    "browser": {
        "name": "Firefox",
        "version": "103.0"
    },
    "operatingSystem": {
        "name": "Mac OS X",
        "version": "10.15"
    },
    "device": {
        "type": "Mac"
    },
    "locations": [
        {
            "at": "2022-08-17T01:21:30.116Z",
            "remoteIp": "174.1.62.19"
        }
    ],
    "lastSignOn": {
        "remoteIp": "174.1.62.19",
        "authenticators": [
            "pwd"
        ],
        "withAuthenticator": {
            "pwd": {
                "policy": {
                    "id": "874d5c7d-5e1c-4e73-b2b5-dfe1453b02f5",
                    "type": "PINGONE"
                },
                "at": "2022-08-17T01:21:30.116Z"
            }
        },
        "policy": {
            "id": "874d5c7d-5e1c-4e73-b2b5-dfe1453b02f5",
            "type": "PINGONE"
        },
        "at": "2022-08-17T01:21:30.116Z"
    },
    "expiresAt": "2022-11-25T01:21:30.117Z"
}