Create Custom Push Provider
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.
Request Model
| Property | Type | Required? |
|---|---|---|
|
String |
Required |
|
String |
Required |
|
String |
Required |
|
String |
Required |
|
Array |
Optional |
|
String |
Required |
|
String |
Required |
|
String |
Required |
|
String |
Required |
|
Array |
Optional |
|
String |
Required |
|
String |
Required |
Refer to the Push delivery data model for full property descriptions.
Body
raw ( application/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
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"
}'
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);
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))
}
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"
}
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();
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);
});
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);
});
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
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();
}
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
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
{
"_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"
}