---
title: Create Custom Push Provider
description: This example uses the pushDeliverySettings endpoint to create a custom sender for push notifications.
component: pingone-api-ea
page_id: pingone-api-ea:platform:early-access/push-delivery-settings/create_custom_push_provider
canonical_url: https://developer.pingidentity.com/pingone-api-ea/platform/early-access/push-delivery-settings/create_custom_push_provider.html
llms_txt: https://developer.pingidentity.com/pingone-api-ea/llms.txt
docs_for_agents: https://developer.pingidentity.com/build-with-ai/docs-for-agents.md
section_ids:
  headers: Headers
  body: Body
  example-request: Example Request
  example-response: Example Response
---

# Create Custom Push Provider

##

```none
POST {{apiPath}}/v1/environments/{{envID}}/notificationsSettings/pushDeliverySettings
```

This example uses the `pushDeliverySettings` endpoint to create a custom sender for push notifications.

This allows you to use a gateway of your own to send the push data to push notification services such as APNs and FCM, rather than having PingOne communicate directly with the push notification services.

If you define such a gateway, you just have to provide PingOne with the authentication credentials for your gateway rather than having to provide your credentials for the push notification service.

As can be seen in the `authentication` object, OAuth2 is used for authentication with the gateway.

The variable `${push-data}` represents the relevant data provided by PingOne so that you can make the appropriate API calls to the push notification service to send the push notifications to your users.

> **Collapse: Request Model**
>
> | Property                      | Type   | Required? |
> | ----------------------------- | ------ | --------- |
> | `authentication.authUrl`      | String | Required  |
> | `authentication.clientId`     | String | Required  |
> | `authentication.clientSecret` | String | Required  |
> | `authentication.method`       | String | Required  |
> | `authentication.scopes`       | Array  | Optional  |
> | `name`                        | String | Required  |
> | `provider`                    | String | Required  |
> | `requests.body`               | String | Required  |
> | `requests.deliveryMethod`     | String | Required  |
> | `requests.headers`            | Array  | Optional  |
> | `requests.method`             | String | Required  |
> | `requests.url`                | String | Required  |
>
> Refer to the [Push delivery data model](../push-delivery-settings.html#push-delivery-data-model) for full property descriptions.

### Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

### Body

raw ( application/json )

```json
{
	"name":"Custom push provider - created with API",
	"authentication": {
        "authUrl": "https://login.example.com/oauth/token",
        "clientId": "idForAccount",
        "clientSecret": "{{customProviderClientSecret}}",
        "scopes":["push:send"],
        "method": "OAUTH2"
    },
	"requests":[
	    {
            "body":"data=${push-data}",
		    "method":"POST",
		    "deliveryMethod":"PUSH",
		    "url":"https://www.example.com",
		    "headers": {
                "content-type":"application/json"
            }
		}
	],
	"provider":"CUSTOM_PROVIDER"
}
```

##

### Example Request

* cURL

* C#

* Go

* HTTP

* Java

* jQuery

* NodeJS

* Python

* PHP

* Ruby

* Swift

```shell
curl --location --globoff '{{apiPath}}/v1/environments/{{envID}}/notificationsSettings/pushDeliverySettings' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
	"name":"Custom push provider - created with API",
	"authentication": {
        "authUrl": "https://login.example.com/oauth/token",
        "clientId": "idForAccount",
        "clientSecret": "{{customProviderClientSecret}}",
        "scopes":["push:send"],
        "method": "OAUTH2"
    },
	"requests":[
	    {
            "body":"data=${push-data}",
		    "method":"POST",
		    "deliveryMethod":"PUSH",
		    "url":"https://www.example.com",
		    "headers": {
                "content-type":"application/json"
            }
		}
	],
	"provider":"CUSTOM_PROVIDER"
}'
```

```csharp
var options = new RestClientOptions("{{apiPath}}/v1/environments/{{envID}}/notificationsSettings/pushDeliverySettings")
{
  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" +
@"	""name"":""Custom push provider - created with API""," + "\n" +
@"	""authentication"": {" + "\n" +
@"        ""authUrl"": ""https://login.example.com/oauth/token""," + "\n" +
@"        ""clientId"": ""idForAccount""," + "\n" +
@"        ""clientSecret"": ""{{customProviderClientSecret}}""," + "\n" +
@"        ""scopes"":[""push:send""]," + "\n" +
@"        ""method"": ""OAUTH2""" + "\n" +
@"    }," + "\n" +
@"	""requests"":[" + "\n" +
@"	    {" + "\n" +
@"            ""body"":""data=${push-data}""," + "\n" +
@"		    ""method"":""POST""," + "\n" +
@"		    ""deliveryMethod"":""PUSH""," + "\n" +
@"		    ""url"":""https://www.example.com""," + "\n" +
@"		    ""headers"": {" + "\n" +
@"                ""content-type"":""application/json""" + "\n" +
@"            }" + "\n" +
@"		}" + "\n" +
@"	]," + "\n" +
@"	""provider"":""CUSTOM_PROVIDER""" + "\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}}/notificationsSettings/pushDeliverySettings"
  method := "POST"

  payload := strings.NewReader(`{
	"name":"Custom push provider - created with API",
	"authentication": {
        "authUrl": "https://login.example.com/oauth/token",
        "clientId": "idForAccount",
        "clientSecret": "{{customProviderClientSecret}}",
        "scopes":["push:send"],
        "method": "OAUTH2"
    },
	"requests":[
	    {
            "body":"data=${push-data}",
		    "method":"POST",
		    "deliveryMethod":"PUSH",
		    "url":"https://www.example.com",
		    "headers": {
                "content-type":"application/json"
            }
		}
	],
	"provider":"CUSTOM_PROVIDER"
}`)

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

{
	"name":"Custom push provider - created with API",
	"authentication": {
        "authUrl": "https://login.example.com/oauth/token",
        "clientId": "idForAccount",
        "clientSecret": "{{customProviderClientSecret}}",
        "scopes":["push:send"],
        "method": "OAUTH2"
    },
	"requests":[
	    {
            "body":"data=${push-data}",
		    "method":"POST",
		    "deliveryMethod":"PUSH",
		    "url":"https://www.example.com",
		    "headers": {
                "content-type":"application/json"
            }
		}
	],
	"provider":"CUSTOM_PROVIDER"
}
```

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n\t\"name\":\"Custom push provider - created with API\",\n\t\"authentication\": {\n        \"authUrl\": \"https://login.example.com/oauth/token\",\n        \"clientId\": \"idForAccount\",\n        \"clientSecret\": \"{{customProviderClientSecret}}\",\n        \"scopes\":[\"push:send\"],\n        \"method\": \"OAUTH2\"\n    },\n\t\"requests\":[\n\t    {\n            \"body\":\"data=${push-data}\",\n\t\t    \"method\":\"POST\",\n\t\t    \"deliveryMethod\":\"PUSH\",\n\t\t    \"url\":\"https://www.example.com\",\n\t\t    \"headers\": {\n                \"content-type\":\"application/json\"\n            }\n\t\t}\n\t],\n\t\"provider\":\"CUSTOM_PROVIDER\"\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/v1/environments/{{envID}}/notificationsSettings/pushDeliverySettings")
  .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}}/notificationsSettings/pushDeliverySettings",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "Custom push provider - created with API",
    "authentication": {
      "authUrl": "https://login.example.com/oauth/token",
      "clientId": "idForAccount",
      "clientSecret": "{{customProviderClientSecret}}",
      "scopes": [
        "push:send"
      ],
      "method": "OAUTH2"
    },
    "requests": [
      {
        "body": "data=${push-data}",
        "method": "POST",
        "deliveryMethod": "PUSH",
        "url": "https://www.example.com",
        "headers": {
          "content-type": "application/json"
        }
      }
    ],
    "provider": "CUSTOM_PROVIDER"
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
```

```javascript
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/v1/environments/{{envID}}/notificationsSettings/pushDeliverySettings',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "Custom push provider - created with API",
    "authentication": {
      "authUrl": "https://login.example.com/oauth/token",
      "clientId": "idForAccount",
      "clientSecret": "{{customProviderClientSecret}}",
      "scopes": [
        "push:send"
      ],
      "method": "OAUTH2"
    },
    "requests": [
      {
        "body": "data=${push-data}",
        "method": "POST",
        "deliveryMethod": "PUSH",
        "url": "https://www.example.com",
        "headers": {
          "content-type": "application/json"
        }
      }
    ],
    "provider": "CUSTOM_PROVIDER"
  })

};
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}}/notificationsSettings/pushDeliverySettings"

payload = json.dumps({
  "name": "Custom push provider - created with API",
  "authentication": {
    "authUrl": "https://login.example.com/oauth/token",
    "clientId": "idForAccount",
    "clientSecret": "{{customProviderClientSecret}}",
    "scopes": [
      "push:send"
    ],
    "method": "OAUTH2"
  },
  "requests": [
    {
      "body": "data=${push-data}",
      "method": "POST",
      "deliveryMethod": "PUSH",
      "url": "https://www.example.com",
      "headers": {
        "content-type": "application/json"
      }
    }
  ],
  "provider": "CUSTOM_PROVIDER"
})
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}}/notificationsSettings/pushDeliverySettings');
$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	"name":"Custom push provider - created with API",\n	"authentication": {\n        "authUrl": "https://login.example.com/oauth/token",\n        "clientId": "idForAccount",\n        "clientSecret": "{{customProviderClientSecret}}",\n        "scopes":["push:send"],\n        "method": "OAUTH2"\n    },\n	"requests":[\n	    {\n            "body":"data=${push-data}",\n		    "method":"POST",\n		    "deliveryMethod":"PUSH",\n		    "url":"https://www.example.com",\n		    "headers": {\n                "content-type":"application/json"\n            }\n		}\n	],\n	"provider":"CUSTOM_PROVIDER"\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}}/notificationsSettings/pushDeliverySettings")

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({
  "name": "Custom push provider - created with API",
  "authentication": {
    "authUrl": "https://login.example.com/oauth/token",
    "clientId": "idForAccount",
    "clientSecret": "{{customProviderClientSecret}}",
    "scopes": [
      "push:send"
    ],
    "method": "OAUTH2"
  },
  "requests": [
    {
      "body": "data=\${push-data}",
      "method": "POST",
      "deliveryMethod": "PUSH",
      "url": "https://www.example.com",
      "headers": {
        "content-type": "application/json"
      }
    }
  ],
  "provider": "CUSTOM_PROVIDER"
})

response = http.request(request)
puts response.read_body
```

```swift
let parameters = "{\n\t\"name\":\"Custom push provider - created with API\",\n\t\"authentication\": {\n        \"authUrl\": \"https://login.example.com/oauth/token\",\n        \"clientId\": \"idForAccount\",\n        \"clientSecret\": \"{{customProviderClientSecret}}\",\n        \"scopes\":[\"push:send\"],\n        \"method\": \"OAUTH2\"\n    },\n\t\"requests\":[\n\t    {\n            \"body\":\"data=${push-data}\",\n\t\t    \"method\":\"POST\",\n\t\t    \"deliveryMethod\":\"PUSH\",\n\t\t    \"url\":\"https://www.example.com\",\n\t\t    \"headers\": {\n                \"content-type\":\"application/json\"\n            }\n\t\t}\n\t],\n\t\"provider\":\"CUSTOM_PROVIDER\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/v1/environments/{{envID}}/notificationsSettings/pushDeliverySettings")!,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.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/notificationsSettings/pushDeliverySettings/4d64a2b8-80cf-4295-97ae-ad33ab08db6b"
        },
        "environment": {
            "href": "https://api.pingone.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "4d64a2b8-80cf-4295-97ae-ad33ab08db6b",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "name": "Custom push provider - created with API",
    "provider": "CUSTOM_PROVIDER",
    "authentication": {
        "grantType": "CLIENT_CREDENTIALS",
        "authUrl": "https://login.example.com/oauth/token",
        "clientId": "idForAccount",
        "scopes": [
            "push:send"
        ],
        "method": "OAUTH2"
    },
    "requests": [
        {
            "deliveryMethod": "PUSH",
            "url": "https://www.example.com",
            "method": "POST",
            "body": "${push-data}",
            "headers": {
                "content-type": "application/json"
            }
        }
    ],
    "createdAt": "2026-06-23T15:42:12.555Z",
    "updatedAt": "2026-06-23T15:42:12.555Z"
}
```
