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
-
Refer to Application MFA Push Credentials for important overview information.
-
Create an application to get an
appID. Refer to Application Operations.
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 |
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"
}