---
title: Create MFA Push Credential (APNS)
description: This sample shows the POST {{apiPath}}/v1/environments/{{envID}}/applications/{{appID}}/pushCredentials operation to create the push credentials for an iOS native application in the specified environment resource.
component: pingone-api
page_id: pingone-api:platform:applications/application-mfa-push-credentials/create-mfa-push-credential-apns
canonical_url: https://developer.pingidentity.com/pingone-api/platform/applications/application-mfa-push-credentials/create-mfa-push-credential-apns.html
section_ids:
  prerequisites: Prerequisites
  headers: Headers
  body: Body
  example-request: Example Request
  example-response: Example Response
---

# Create MFA Push Credential (APNS)

##

```none
POST {{apiPath}}/v1/environments/{{envID}}/applications/{{appID}}/pushCredentials
```

This sample shows the `POST {{apiPath}}/v1/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](../application-mfa-push-credentials.html) for important overview information.

* Create an application to get an `appID`. Refer to [Application Operations](../applications-1.html).

> **Collapse: Request Model**
>
> Refer to the [MFA push credentials data model](../application-mfa-push-credentials.html#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 )

```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

```shell
curl --location --globoff '{{apiPath}}/v1/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-----"
}'
```

```csharp
var options = new RestClientOptions("{{apiPath}}/v1/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);
```

```golang
package main

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

func main() {

  url := "{{apiPath}}/v1/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))
}
```

```http
POST /v1/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-----"
}
```

```java
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}}/v1/environments/{{envID}}/applications/{{appID}}/pushCredentials")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
```

```javascript
var settings = {
  "url": "{{apiPath}}/v1/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);
});
```

```javascript
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/v1/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);
});
```

```python
import requests
import json

url = "{{apiPath}}/v1/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
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/v1/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();
}
```

```ruby
require "uri"
require "json"
require "net/http"

url = URI("{{apiPath}}/v1/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
```

```swift
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}}/v1/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

```json
{
    "_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"
}
```
