PingOne Platform APIs

Step 1: Send an authorization request

   

GET {{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https://www.example.com&scope=openid profile&response_mode=pi.flow&request={{requestParam}}

The PingOne authorization endpoint /{{envID}}/as/authorize is used to interact with the resource owner and obtain an authorization grant. The authorization request must include values for the following properties:

  • client_id

    A string that specifies the application’s ID.

  • response_type

    A string that specifies the code or token type returned by an authorization request. For this activity, the value is code.

  • response_mode

    A string that specifies the mechanism for returning authorization response parameters from the authorization endpoint. This property specifies the pi.flow value to designate that the redirect_uri parameter is not required and authorization response parameters are encoded as a JSON object wrapped in a flow response and returned directly to the client with a 200 status.

  • request

    A string that specifies a JWT that enables OIDC/OAuth2 request parameters to be passed as a single, self-contained parameter. For more information about creating the request token, refer to Create a request property JWT.

In the Postman collection, this step includes a pre-request script that creates the request token and assigns its value to your Postman environment. You do not need to create the request JWT manually to run this collection.

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https%3A%2F%2Fwww.example.com&scope=openid%20profile&response_mode=pi.flow&request={{requestParam}}'
var options = new RestClientOptions("{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https://www.example.com&scope=openid profile&response_mode=pi.flow&request={{requestParam}}")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Get);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main

import (
  "fmt"
  "net/http"
  "io"
)

func main() {

  url := "{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https%3A%2F%2Fwww.example.com&scope=openid%20profile&response_mode=pi.flow&request={{requestParam}}"
  method := "GET"

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)

  if err != nil {
    fmt.Println(err)
    return
  }
  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))
}
GET /{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https://www.example.com&scope=openid profile&response_mode=pi.flow&request={{requestParam}} HTTP/1.1
Host: {{authPath}}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https://www.example.com&scope=openid profile&response_mode=pi.flow&request={{requestParam}}")
  .method("GET", body)
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https://www.example.com&scope=openid profile&response_mode=pi.flow&request={{requestParam}}",
  "method": "GET",
  "timeout": 0,
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'GET',
  'url': '{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https://www.example.com&scope=openid profile&response_mode=pi.flow&request={{requestParam}}',
  'headers': {
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
import requests

url = "{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https://www.example.com&scope=openid profile&response_mode=pi.flow&request={{requestParam}}"

payload = {}
headers = {}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https://www.example.com&scope=openid profile&response_mode=pi.flow&request={{requestParam}}');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
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 "net/http"

url = URI("{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https://www.example.com&scope=openid profile&response_mode=pi.flow&request={{requestParam}}")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)

response = http.request(request)
puts response.read_body
var request = URLRequest(url: URL(string: "{{authPath}}/{{envID}}/as/authorize?response_type=code&client_id={{mfaNativeAppId}}&redirect_uri=https%3A%2F%2Fwww.example.com&scope=openid%20profile&response_mode=pi.flow&request={{requestParam}}")!,timeoutInterval: Double.infinity)
request.httpMethod = "GET"

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": {
        "user.lookup": {
            "href": "https://auth.pingone.com/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/flows/03eb7d31-48ec-4b6e-a1c6-7fed9ccd93ae"
        },
        "self": {
            "href": "https://auth.pingone.com/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/flows/03eb7d31-48ec-4b6e-a1c6-7fed9ccd93ae"
        },
        "signOnPage": {
            "href": "https://apps.pingone.com/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/signon/?flowId=03eb7d31-48ec-4b6e-a1c6-7fed9ccd93ae"
        }
    },
    "_embedded": {
        "application": {
            "name": "MFA_NativeApp"
        }
    },
    "id": "03eb7d31-48ec-4b6e-a1c6-7fed9ccd93ae",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "resumeUrl": "https://auth.pingone.com/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/as/resume?flowId=03eb7d31-48ec-4b6e-a1c6-7fed9ccd93ae",
    "status": "SIGN_ON_REQUIRED",
    "createdAt": "2026-04-22T20:12:10.784Z",
    "expiresAt": "2026-04-22T20:27:10.784Z"
}