PingOne Platform APIs

Import Certificate

 

POST {{apiPath}}/environments/{{envID}}/customDomains/{{customDomainID}}

The POST {{apiPath}}/environments/{{envID}}/customDomains/{{customDomainID}} operation imports the SSL certificate used by the custom domain resource. The request is valid when the status property value is set to SSL_CERTIFICATE_REQUIRED or ACTIVE. This operation uses the application/vnd.pingidentity.certificate.import+json custom media type as the content type in the request header.

The certificate, intermediateCertificates, and privateKey property values in the request body must be expressed as a single line. To account for line breaks in the text, you must use the \n newline escape characters to represent a line break. For example, the following certificate text:

-----BEGIN CERTIFICATE-----
MIIFXDCCBESg...

must be written in the request body JSON as:

-----BEGIN CERTIFICATE-----\nMIIFXDCCBESg...

If any of the certificates and keys are invalid, the response returns an INVALID_VALUE error. If the request is successful, the response returns a 200 OK message.

The migrated attribute returned in the response body is only for informational purposes while PingOne undergoes custom domain infrastructure changes, and will be removed in the future. Refer to Custom domain infrastructure changes in the PingOne administrator guide for more information on the infrastructure changes.

When the status property returned in the response is ACTIVE, remember that it can take some time before the custom domain is operational.

Prerequisites

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/vnd.pingidentity.certificate.import+json

Body

raw ( application/vnd.pingidentity.certificate.import+json )

{
  "certificate": "{{certificate}}",
  "intermediateCertificates": "{{intermediateCertificate}}",
  "privateKey": "{{privateKey}}"
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{apiPath}}/environments/{{envID}}/customDomains/{{customDomainID}}' \
--header 'Content-Type: application/vnd.pingidentity.certificate.import+json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
  "certificate": "{{certificate}}",
  "intermediateCertificates": "{{intermediateCertificate}}",
  "privateKey": "{{privateKey}}"
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/customDomains/{{customDomainID}}")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Post);
request.AddHeader("Content-Type", "application/vnd.pingidentity.certificate.import+json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@"  ""certificate"": ""{{certificate}}""," + "\n" +
@"  ""intermediateCertificates"": ""{{intermediateCertificate}}""," + "\n" +
@"  ""privateKey"": ""{{privateKey}}""" + "\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}}/customDomains/{{customDomainID}}"
  method := "POST"

  payload := strings.NewReader(`{
  "certificate": "{{certificate}}",
  "intermediateCertificates": "{{intermediateCertificate}}",
  "privateKey": "{{privateKey}}"
}`)

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

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Content-Type", "application/vnd.pingidentity.certificate.import+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}}/customDomains/{{customDomainID}} HTTP/1.1
Host: {{apiPath}}
Content-Type: application/vnd.pingidentity.certificate.import+json
Authorization: Bearer {{accessToken}}

{
  "certificate": "{{certificate}}",
  "intermediateCertificates": "{{intermediateCertificate}}",
  "privateKey": "{{privateKey}}"
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/vnd.pingidentity.certificate.import+json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"certificate\": \"{{certificate}}\",\n  \"intermediateCertificates\": \"{{intermediateCertificate}}\",\n  \"privateKey\": \"{{privateKey}}\"\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/customDomains/{{customDomainID}}")
  .method("POST", body)
  .addHeader("Content-Type", "application/vnd.pingidentity.certificate.import+json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{apiPath}}/environments/{{envID}}/customDomains/{{customDomainID}}",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/vnd.pingidentity.certificate.import+json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "certificate": "{{certificate}}",
    "intermediateCertificates": "{{intermediateCertificate}}",
    "privateKey": "{{privateKey}}"
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/environments/{{envID}}/customDomains/{{customDomainID}}',
  'headers': {
    'Content-Type': 'application/vnd.pingidentity.certificate.import+json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "certificate": "{{certificate}}",
    "intermediateCertificates": "{{intermediateCertificate}}",
    "privateKey": "{{privateKey}}"
  })

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

url = "{{apiPath}}/environments/{{envID}}/customDomains/{{customDomainID}}"

payload = json.dumps({
  "certificate": "{{certificate}}",
  "intermediateCertificates": "{{intermediateCertificate}}",
  "privateKey": "{{privateKey}}"
})
headers = {
  'Content-Type': 'application/vnd.pingidentity.certificate.import+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}}/customDomains/{{customDomainID}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Content-Type' => 'application/vnd.pingidentity.certificate.import+json',
  'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n  "certificate": "{{certificate}}",\n  "intermediateCertificates": "{{intermediateCertificate}}",\n  "privateKey": "{{privateKey}}"\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}}/customDomains/{{customDomainID}}")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/vnd.pingidentity.certificate.import+json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
  "certificate": "{{certificate}}",
  "intermediateCertificates": "{{intermediateCertificate}}",
  "privateKey": "{{privateKey}}"
})

response = http.request(request)
puts response.read_body
let parameters = "{\n  \"certificate\": \"{{certificate}}\",\n  \"intermediateCertificates\": \"{{intermediateCertificate}}\",\n  \"privateKey\": \"{{privateKey}}\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/customDomains/{{customDomainID}}")!,timeoutInterval: Double.infinity)
request.addValue("application/vnd.pingidentity.certificate.import+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

200 OK

{
    "_links": {
        "self": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/customDomains/4490de20-a93d-4369-82a5-b04f935c522a"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "93838ab0-0238-40fa-ae4e-6b890882d323",
    "domainName": "custom-domain.example.com",
    "status": "ACTIVE",
    "certificate": {
        "expiresAt": "2022-06-04T21:52:34.866Z",
    },
    "migrated": true
}