Test Push Notifications
POST {{apiPath}}/environments/{{envID}}/notifications?sync=true
This example uses the notifications endpoint with the query parameter sync=true to test push notifications for a mobile application.
If the push was successfully received, the status field in the response will be SENT. If there was a problem, a standard error response will be returned, containing details of the cause.
You must set data.type to DRY for the test to work correctly.
Query parameters
The following query parameters are allowed in the request:
| Parameter | Values |
|---|---|
|
|
|
|
Request Model
| Property | Type | Required? |
|---|---|---|
|
String |
Required |
|
String |
Required |
|
String |
Required |
|
String |
Required |
|
String |
Required |
|
String |
Required |
Refer to the Send Notifications data model for full property descriptions.
Example Request
-
cURL
-
C#
-
Go
-
HTTP
-
Java
-
jQuery
-
NodeJS
-
Python
-
PHP
-
Ruby
-
Swift
curl --location --globoff '{{apiPath}}/environments/{{envID}}/notifications?sync=true' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"title": "PingOne test",
"body": "Test push successful",
"deliveryMethod": "Google",
"pushToken": "{{pushToken}}",
"application": {
"id": "{{appID}}"
},
"data": {
"type": "DRY"
}
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/notifications?sync=true")
{
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" +
@" ""title"": ""PingOne test""," + "\n" +
@" ""body"": ""Test push successful""," + "\n" +
@" ""deliveryMethod"": ""Google""," + "\n" +
@" ""pushToken"": ""{{pushToken}}""," + "\n" +
@" ""application"": {" + "\n" +
@" ""id"": ""{{appID}}""" + "\n" +
@" }," + "\n" +
@" ""data"": {" + "\n" +
@" ""type"": ""DRY""" + "\n" +
@" }" + "\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}}/notifications?sync=true"
method := "POST"
payload := strings.NewReader(`{
"title": "PingOne test",
"body": "Test push successful",
"deliveryMethod": "Google",
"pushToken": "{{pushToken}}",
"application": {
"id": "{{appID}}"
},
"data": {
"type": "DRY"
}
}`)
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}}/notifications?sync=true HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}
{
"title": "PingOne test",
"body": "Test push successful",
"deliveryMethod": "Google",
"pushToken": "{{pushToken}}",
"application": {
"id": "{{appID}}"
},
"data": {
"type": "DRY"
}
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"title\": \"PingOne test\",\n \"body\": \"Test push successful\",\n \"deliveryMethod\": \"Google\",\n \"pushToken\": \"{{pushToken}}\",\n \"application\": {\n \"id\": \"{{appID}}\"\n },\n \"data\": {\n \"type\": \"DRY\"\n }\n}");
Request request = new Request.Builder()
.url("{{apiPath}}/environments/{{envID}}/notifications?sync=true")
.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}}/notifications?sync=true",
"method": "POST",
"timeout": 0,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{accessToken}}"
},
"data": JSON.stringify({
"title": "PingOne test",
"body": "Test push successful",
"deliveryMethod": "Google",
"pushToken": "{{pushToken}}",
"application": {
"id": "{{appID}}"
},
"data": {
"type": "DRY"
}
}),
};
$.ajax(settings).done(function (response) {
console.log(response);
});
var request = require('request');
var options = {
'method': 'POST',
'url': '{{apiPath}}/environments/{{envID}}/notifications?sync=true',
'headers': {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{accessToken}}'
},
body: JSON.stringify({
"title": "PingOne test",
"body": "Test push successful",
"deliveryMethod": "Google",
"pushToken": "{{pushToken}}",
"application": {
"id": "{{appID}}"
},
"data": {
"type": "DRY"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{{apiPath}}/environments/{{envID}}/notifications?sync=true"
payload = json.dumps({
"title": "PingOne test",
"body": "Test push successful",
"deliveryMethod": "Google",
"pushToken": "{{pushToken}}",
"application": {
"id": "{{appID}}"
},
"data": {
"type": "DRY"
}
})
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}}/notifications?sync=true');
$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 "title": "PingOne test",\n "body": "Test push successful",\n "deliveryMethod": "Google",\n "pushToken": "{{pushToken}}",\n "application": {\n "id": "{{appID}}"\n },\n "data": {\n "type": "DRY"\n }\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}}/notifications?sync=true")
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({
"title": "PingOne test",
"body": "Test push successful",
"deliveryMethod": "Google",
"pushToken": "{{pushToken}}",
"application": {
"id": "{{appID}}"
},
"data": {
"type": "DRY"
}
})
response = http.request(request)
puts response.read_body
let parameters = "{\n \"title\": \"PingOne test\",\n \"body\": \"Test push successful\",\n \"deliveryMethod\": \"Google\",\n \"pushToken\": \"{{pushToken}}\",\n \"application\": {\n \"id\": \"{{appID}}\"\n },\n \"data\": {\n \"type\": \"DRY\"\n }\n}"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/notifications?sync=true")!,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
202 Accepted
{
"_links": {
"self": {
"href": "https://api.pingone.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/notifications/0f23701b-0cfa-43c0-a09f-fb35596c7c30"
},
"environment": {
"href": "https://api.pingone.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
}
},
"id": "0f23701b-0cfa-43c0-a09f-fb35596c7c30",
"environment": {
"id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
},
"createdAt": "2023-08-07T16:26:10.541Z",
"updatedAt": "2023-08-07T16:26:10.862Z",
"status": "SENT",
"policy": {
"id": "a981b194-4caa-7af8-2ec1-9879af481c36"
},
"deliveryMethod": "Google",
"vendor": "FCM_HTTP_V1",
"bagParams": {
"retry": false,
"failures": 0
},
"claimedStatus": "NOT_CLAIMED",
"pushToken": "df-a1bi2T9mqnNE66RHdHj:APA91bFiadh3HCC9YEEDfzZpeH6E0B94yJmn4q5f0fksAOjQ_FShcRxj1LYoSCW9Sxfa2EuYhgUVOopvIwl6xM_sJ4SFOhwFzoNjxFyKj-O7oboC52JsiOeyI1tiiGihWrtrq-UydPUG",
"application": {
"id": "8370dc35-a30d-45b6-9ff5-58aa943fca7d"
},
"title": "PingOne test",
"body": "Test push successful",
"dryRun": false,
"data": {
"type": "DRY"
},
"androidType": false
}