PingOne Platform APIs

Create MFA Push Credential (APNS)

   

POST {{apiPath}}/environments/{{envID}}/applications/{{appID}}/pushCredentials

This sample shows the POST {{apiPath}}/environments/{{envID}}/applications/{{appID}}/pushCredentials operation to create the push credentials for an iOS native application in the specified environment resource.

The request URL identifies the environment ID and application ID. The request body specifies the type and the key attribute values. When the type is "APNS", the request also specifies the teamId and the token attribute values.

Since key, teamId and token are considered credentials, these fields can be created with a POST request and updated with a PUT request, but are not returned by a GET request.

Prerequisites

Request Model

Refer to the MFA push credentials data model for complete descriptions.

Property Type Required?

type

String

Required

key

String

Required

teamId

String

Required

token

String

Required

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "type": "APNS",
    "key": "key.value",
    "teamId": "team.id",
    "token": "-----BEGIN PRIVATE KEY-----\nMIGTAgEA****7HUikGZU\n-----END PRIVATE KEY-----"
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{apiPath}}/environments/{{envID}}/applications/{{appID}}/pushCredentials' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "type": "APNS",
    "key": "key.value",
    "teamId": "team.id",
    "token": "-----BEGIN PRIVATE KEY-----\nMIGTAgEA****7HUikGZU\n-----END PRIVATE KEY-----"
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/applications/{{appID}}/pushCredentials")
{
  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" +
@"    ""type"": ""APNS""," + "\n" +
@"    ""key"": ""key.value""," + "\n" +
@"    ""teamId"": ""team.id""," + "\n" +
@"    ""token"": ""-----BEGIN PRIVATE KEY-----\nMIGTAgEA****7HUikGZU\n-----END PRIVATE KEY-----""" + "\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}}/applications/{{appID}}/pushCredentials"
  method := "POST"

  payload := strings.NewReader(`{
    "type": "APNS",
    "key": "key.value",
    "teamId": "team.id",
    "token": "-----BEGIN PRIVATE KEY-----\nMIGTAgEA****7HUikGZU\n-----END PRIVATE KEY-----"
}`)

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

{
    "type": "APNS",
    "key": "key.value",
    "teamId": "team.id",
    "token": "-----BEGIN PRIVATE KEY-----\nMIGTAgEA****7HUikGZU\n-----END PRIVATE KEY-----"
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"type\": \"APNS\",\n    \"key\": \"key.value\",\n    \"teamId\": \"team.id\",\n    \"token\": \"-----BEGIN PRIVATE KEY-----\\nMIGTAgEA****7HUikGZU\\n-----END PRIVATE KEY-----\"\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/applications/{{appID}}/pushCredentials")
  .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}}/applications/{{appID}}/pushCredentials",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "type": "APNS",
    "key": "key.value",
    "teamId": "team.id",
    "token": "-----BEGIN PRIVATE KEY-----\nMIGTAgEA****7HUikGZU\n-----END PRIVATE KEY-----"
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/environments/{{envID}}/applications/{{appID}}/pushCredentials',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "type": "APNS",
    "key": "key.value",
    "teamId": "team.id",
    "token": "-----BEGIN PRIVATE KEY-----\nMIGTAgEA****7HUikGZU\n-----END PRIVATE KEY-----"
  })

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

url = "{{apiPath}}/environments/{{envID}}/applications/{{appID}}/pushCredentials"

payload = json.dumps({
  "type": "APNS",
  "key": "key.value",
  "teamId": "team.id",
  "token": "-----BEGIN PRIVATE KEY-----\nMIGTAgEA****7HUikGZU\n-----END PRIVATE KEY-----"
})
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}}/applications/{{appID}}/pushCredentials');
$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    "type": "APNS",\n    "key": "key.value",\n    "teamId": "team.id",\n    "token": "-----BEGIN PRIVATE KEY-----\\nMIGTAgEA****7HUikGZU\\n-----END PRIVATE KEY-----"\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}}/applications/{{appID}}/pushCredentials")

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({
  "type": "APNS",
  "key": "key.value",
  "teamId": "team.id",
  "token": "-----BEGIN PRIVATE KEY-----\nMIGTAgEA****7HUikGZU\n-----END PRIVATE KEY-----"
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"type\": \"APNS\",\n    \"key\": \"key.value\",\n    \"teamId\": \"team.id\",\n    \"token\": \"-----BEGIN PRIVATE KEY-----\\nMIGTAgEA****7HUikGZU\\n-----END PRIVATE KEY-----\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/applications/{{appID}}/pushCredentials")!,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/applications/5e81bba1-5185-457c-926a-aae0e8939109/pushCredentials/40de73de-ba62-494c-b605-4da440421fee"
        },
        "environment": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        },
        "application": {
            "href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/applications/5e81bba1-5185-457c-926a-aae0e8939109"
        }
    },
    "id": "40de73de-ba62-494c-b605-4da440421fee",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "application": {
        "id": "5e81bba1-5185-457c-926a-aae0e8939109"
    },
    "createdAt": "2019-06-03T11:04:05.250Z",
    "updatedAt": "2019-06-03T11:04:05.250Z",
    "type": "APNS"
}