PingOne Platform APIs

Create Notification Policy / Environment

 

POST {{apiPath}}/environments/{{envID}}/notificationsPolicies

When you use the POST {{apiPath}}/environments/{{envID}}/notificationsPolicies endpoint and specify ENVIRONMENT as the type along with the total field, a policy is created to limit the total number of notifications that can be sent to all users in the environment each day.

In this example, the countryLimit object is used to restrict the use of SMS and voice notifications to the United States and Canada, and the cooldownConfiguration object is included to specify the time that the user must wait before requesting another notification such as another OTP.

Note that if you include the optional cooldownConfiguration object, you must include each of the objects below it - sms, email, voice, and whatsApp - even if you don’t want to enable cooldown periods for each of the methods.

Prerequisites

Request Model
Property Type Required?

cooldownConfiguration

Object

Optional

cooldownConfiguration.sms

Object

Required

cooldownConfiguration.email

Object

Required

cooldownConfiguration.voice

Object

Required

cooldownConfiguration.whatsApp

Object

Required

countryLimit

Object

Optional

countryLimit.type

String

Required/Optional

countryLimit.deliveryMethods

Array

Optional

countryLimit.countries

Array

Required/Optional

default

Boolean

Optional

name

String

Required

quotas

Array

Required

quotas[].type

String

Required

quotas[].deliveryMethods

Array

Required

quotas[].total

Integer

Required/Optional

quotas[].claimed

Integer

Required/Optional

quotas[].unclaimed

Integer

Required/Optional

Refer to the Notification policies data model for full property descriptions.

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "name": "Notification policy with environment limit and country limitation and notification cooldown periods",
    "quotas": [
        {
            "type": "ENVIRONMENT",
            "deliveryMethods": [
                "SMS",
                "Voice"
            ],
            "total": 1000
        }
    ],
    "countryLimit": {
        "type": "ALLOWED",
        "deliveryMethods": [
            "SMS",
            "Voice"
        ],
        "countries": [
            "US",
            "CA"
        ]
    },
    "cooldownConfiguration":{
        "sms":{
            "enabled":true,
            "periods":[
                {"duration":30,"timeUnit":"SECONDS"},
                {"duration":2,"timeUnit":"MINUTES"},
                {"duration":3,"timeUnit":"MINUTES"}
            ],
            "resendLimit":5
        },
        "email":{
            "enabled":true,
            "periods":[
                {"duration":30,"timeUnit":"SECONDS"},
                {"duration":1,"timeUnit":"MINUTES"},
                {"duration":2,"timeUnit":"MINUTES"}
            ],
            "resendLimit":4
        },
        "voice":{
            "enabled":true,
            "periods":[
                {"duration":40,"timeUnit":"SECONDS"},
                {"duration":2,"timeUnit":"MINUTES"},
                {"duration":4,"timeUnit":"MINUTES"}
            ],
            "groupBy":"USER_ID",
            "resendLimit":6
        },
        "whatsApp":{
            "enabled":false
        }
    },
    "default": false
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{apiPath}}/environments/{{envID}}/notificationsPolicies' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "name": "Notification policy with environment limit and country limitation and notification cooldown periods",
    "quotas": [
        {
            "type": "ENVIRONMENT",
            "deliveryMethods": [
                "SMS",
                "Voice"
            ],
            "total": 1000
        }
    ],
    "countryLimit": {
        "type": "ALLOWED",
        "deliveryMethods": [
            "SMS",
            "Voice"
        ],
        "countries": [
            "US",
            "CA"
        ]
    },
    "cooldownConfiguration":{
        "sms":{
            "enabled":true,
            "periods":[
                {"duration":30,"timeUnit":"SECONDS"},
                {"duration":2,"timeUnit":"MINUTES"},
                {"duration":3,"timeUnit":"MINUTES"}
            ],
            "resendLimit":5
        },
        "email":{
            "enabled":true,
            "periods":[
                {"duration":30,"timeUnit":"SECONDS"},
                {"duration":1,"timeUnit":"MINUTES"},
                {"duration":2,"timeUnit":"MINUTES"}
            ],
            "resendLimit":4
        },
        "voice":{
            "enabled":true,
            "periods":[
                {"duration":40,"timeUnit":"SECONDS"},
                {"duration":2,"timeUnit":"MINUTES"},
                {"duration":4,"timeUnit":"MINUTES"}
            ],
            "groupBy":"USER_ID",
            "resendLimit":6
        },
        "whatsApp":{
            "enabled":false
        }
    },
    "default": false
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/notificationsPolicies")
{
  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"": ""Notification policy with environment limit and country limitation and notification cooldown periods""," + "\n" +
@"    ""quotas"": [" + "\n" +
@"        {" + "\n" +
@"            ""type"": ""ENVIRONMENT""," + "\n" +
@"            ""deliveryMethods"": [" + "\n" +
@"                ""SMS""," + "\n" +
@"                ""Voice""" + "\n" +
@"            ]," + "\n" +
@"            ""total"": 1000" + "\n" +
@"        }" + "\n" +
@"    ]," + "\n" +
@"    ""countryLimit"": {" + "\n" +
@"        ""type"": ""ALLOWED""," + "\n" +
@"        ""deliveryMethods"": [" + "\n" +
@"            ""SMS""," + "\n" +
@"            ""Voice""" + "\n" +
@"        ]," + "\n" +
@"        ""countries"": [" + "\n" +
@"            ""US""," + "\n" +
@"            ""CA""" + "\n" +
@"        ]" + "\n" +
@"    }," + "\n" +
@"    ""cooldownConfiguration"":{" + "\n" +
@"        ""sms"":{" + "\n" +
@"            ""enabled"":true," + "\n" +
@"            ""periods"":[" + "\n" +
@"                {""duration"":30,""timeUnit"":""SECONDS""}," + "\n" +
@"                {""duration"":2,""timeUnit"":""MINUTES""}," + "\n" +
@"                {""duration"":3,""timeUnit"":""MINUTES""}" + "\n" +
@"            ]," + "\n" +
@"            ""resendLimit"":5" + "\n" +
@"        }," + "\n" +
@"        ""email"":{" + "\n" +
@"            ""enabled"":true," + "\n" +
@"            ""periods"":[" + "\n" +
@"                {""duration"":30,""timeUnit"":""SECONDS""}," + "\n" +
@"                {""duration"":1,""timeUnit"":""MINUTES""}," + "\n" +
@"                {""duration"":2,""timeUnit"":""MINUTES""}" + "\n" +
@"            ]," + "\n" +
@"            ""resendLimit"":4" + "\n" +
@"        }," + "\n" +
@"        ""voice"":{" + "\n" +
@"            ""enabled"":true," + "\n" +
@"            ""periods"":[" + "\n" +
@"                {""duration"":40,""timeUnit"":""SECONDS""}," + "\n" +
@"                {""duration"":2,""timeUnit"":""MINUTES""}," + "\n" +
@"                {""duration"":4,""timeUnit"":""MINUTES""}" + "\n" +
@"            ]," + "\n" +
@"            ""groupBy"":""USER_ID""," + "\n" +
@"            ""resendLimit"":6" + "\n" +
@"        }," + "\n" +
@"        ""whatsApp"":{" + "\n" +
@"            ""enabled"":false" + "\n" +
@"        }" + "\n" +
@"    }," + "\n" +
@"    ""default"": false" + "\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}}/notificationsPolicies"
  method := "POST"

  payload := strings.NewReader(`{
    "name": "Notification policy with environment limit and country limitation and notification cooldown periods",
    "quotas": [
        {
            "type": "ENVIRONMENT",
            "deliveryMethods": [
                "SMS",
                "Voice"
            ],
            "total": 1000
        }
    ],
    "countryLimit": {
        "type": "ALLOWED",
        "deliveryMethods": [
            "SMS",
            "Voice"
        ],
        "countries": [
            "US",
            "CA"
        ]
    },
    "cooldownConfiguration":{
        "sms":{
            "enabled":true,
            "periods":[
                {"duration":30,"timeUnit":"SECONDS"},
                {"duration":2,"timeUnit":"MINUTES"},
                {"duration":3,"timeUnit":"MINUTES"}
            ],
            "resendLimit":5
        },
        "email":{
            "enabled":true,
            "periods":[
                {"duration":30,"timeUnit":"SECONDS"},
                {"duration":1,"timeUnit":"MINUTES"},
                {"duration":2,"timeUnit":"MINUTES"}
            ],
            "resendLimit":4
        },
        "voice":{
            "enabled":true,
            "periods":[
                {"duration":40,"timeUnit":"SECONDS"},
                {"duration":2,"timeUnit":"MINUTES"},
                {"duration":4,"timeUnit":"MINUTES"}
            ],
            "groupBy":"USER_ID",
            "resendLimit":6
        },
        "whatsApp":{
            "enabled":false
        }
    },
    "default": false
}`)

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

{
    "name": "Notification policy with environment limit and country limitation and notification cooldown periods",
    "quotas": [
        {
            "type": "ENVIRONMENT",
            "deliveryMethods": [
                "SMS",
                "Voice"
            ],
            "total": 1000
        }
    ],
    "countryLimit": {
        "type": "ALLOWED",
        "deliveryMethods": [
            "SMS",
            "Voice"
        ],
        "countries": [
            "US",
            "CA"
        ]
    },
    "cooldownConfiguration":{
        "sms":{
            "enabled":true,
            "periods":[
                {"duration":30,"timeUnit":"SECONDS"},
                {"duration":2,"timeUnit":"MINUTES"},
                {"duration":3,"timeUnit":"MINUTES"}
            ],
            "resendLimit":5
        },
        "email":{
            "enabled":true,
            "periods":[
                {"duration":30,"timeUnit":"SECONDS"},
                {"duration":1,"timeUnit":"MINUTES"},
                {"duration":2,"timeUnit":"MINUTES"}
            ],
            "resendLimit":4
        },
        "voice":{
            "enabled":true,
            "periods":[
                {"duration":40,"timeUnit":"SECONDS"},
                {"duration":2,"timeUnit":"MINUTES"},
                {"duration":4,"timeUnit":"MINUTES"}
            ],
            "groupBy":"USER_ID",
            "resendLimit":6
        },
        "whatsApp":{
            "enabled":false
        }
    },
    "default": false
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"name\": \"Notification policy with environment limit and country limitation and notification cooldown periods\",\n    \"quotas\": [\n        {\n            \"type\": \"ENVIRONMENT\",\n            \"deliveryMethods\": [\n                \"SMS\",\n                \"Voice\"\n            ],\n            \"total\": 1000\n        }\n    ],\n    \"countryLimit\": {\n        \"type\": \"ALLOWED\",\n        \"deliveryMethods\": [\n            \"SMS\",\n            \"Voice\"\n        ],\n        \"countries\": [\n            \"US\",\n            \"CA\"\n        ]\n    },\n    \"cooldownConfiguration\":{\n        \"sms\":{\n            \"enabled\":true,\n            \"periods\":[\n                {\"duration\":30,\"timeUnit\":\"SECONDS\"},\n                {\"duration\":2,\"timeUnit\":\"MINUTES\"},\n                {\"duration\":3,\"timeUnit\":\"MINUTES\"}\n            ],\n            \"resendLimit\":5\n        },\n        \"email\":{\n            \"enabled\":true,\n            \"periods\":[\n                {\"duration\":30,\"timeUnit\":\"SECONDS\"},\n                {\"duration\":1,\"timeUnit\":\"MINUTES\"},\n                {\"duration\":2,\"timeUnit\":\"MINUTES\"}\n            ],\n            \"resendLimit\":4\n        },\n        \"voice\":{\n            \"enabled\":true,\n            \"periods\":[\n                {\"duration\":40,\"timeUnit\":\"SECONDS\"},\n                {\"duration\":2,\"timeUnit\":\"MINUTES\"},\n                {\"duration\":4,\"timeUnit\":\"MINUTES\"}\n            ],\n            \"groupBy\":\"USER_ID\",\n            \"resendLimit\":6\n        },\n        \"whatsApp\":{\n            \"enabled\":false\n        }\n    },\n    \"default\": false\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/notificationsPolicies")
  .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}}/notificationsPolicies",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "Notification policy with environment limit and country limitation and notification cooldown periods",
    "quotas": [
      {
        "type": "ENVIRONMENT",
        "deliveryMethods": [
          "SMS",
          "Voice"
        ],
        "total": 1000
      }
    ],
    "countryLimit": {
      "type": "ALLOWED",
      "deliveryMethods": [
        "SMS",
        "Voice"
      ],
      "countries": [
        "US",
        "CA"
      ]
    },
    "cooldownConfiguration": {
      "sms": {
        "enabled": true,
        "periods": [
          {
            "duration": 30,
            "timeUnit": "SECONDS"
          },
          {
            "duration": 2,
            "timeUnit": "MINUTES"
          },
          {
            "duration": 3,
            "timeUnit": "MINUTES"
          }
        ],
        "resendLimit": 5
      },
      "email": {
        "enabled": true,
        "periods": [
          {
            "duration": 30,
            "timeUnit": "SECONDS"
          },
          {
            "duration": 1,
            "timeUnit": "MINUTES"
          },
          {
            "duration": 2,
            "timeUnit": "MINUTES"
          }
        ],
        "resendLimit": 4
      },
      "voice": {
        "enabled": true,
        "periods": [
          {
            "duration": 40,
            "timeUnit": "SECONDS"
          },
          {
            "duration": 2,
            "timeUnit": "MINUTES"
          },
          {
            "duration": 4,
            "timeUnit": "MINUTES"
          }
        ],
        "groupBy": "USER_ID",
        "resendLimit": 6
      },
      "whatsApp": {
        "enabled": false
      }
    },
    "default": false
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/environments/{{envID}}/notificationsPolicies',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "Notification policy with environment limit and country limitation and notification cooldown periods",
    "quotas": [
      {
        "type": "ENVIRONMENT",
        "deliveryMethods": [
          "SMS",
          "Voice"
        ],
        "total": 1000
      }
    ],
    "countryLimit": {
      "type": "ALLOWED",
      "deliveryMethods": [
        "SMS",
        "Voice"
      ],
      "countries": [
        "US",
        "CA"
      ]
    },
    "cooldownConfiguration": {
      "sms": {
        "enabled": true,
        "periods": [
          {
            "duration": 30,
            "timeUnit": "SECONDS"
          },
          {
            "duration": 2,
            "timeUnit": "MINUTES"
          },
          {
            "duration": 3,
            "timeUnit": "MINUTES"
          }
        ],
        "resendLimit": 5
      },
      "email": {
        "enabled": true,
        "periods": [
          {
            "duration": 30,
            "timeUnit": "SECONDS"
          },
          {
            "duration": 1,
            "timeUnit": "MINUTES"
          },
          {
            "duration": 2,
            "timeUnit": "MINUTES"
          }
        ],
        "resendLimit": 4
      },
      "voice": {
        "enabled": true,
        "periods": [
          {
            "duration": 40,
            "timeUnit": "SECONDS"
          },
          {
            "duration": 2,
            "timeUnit": "MINUTES"
          },
          {
            "duration": 4,
            "timeUnit": "MINUTES"
          }
        ],
        "groupBy": "USER_ID",
        "resendLimit": 6
      },
      "whatsApp": {
        "enabled": false
      }
    },
    "default": false
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
import requests
import json

url = "{{apiPath}}/environments/{{envID}}/notificationsPolicies"

payload = json.dumps({
  "name": "Notification policy with environment limit and country limitation and notification cooldown periods",
  "quotas": [
    {
      "type": "ENVIRONMENT",
      "deliveryMethods": [
        "SMS",
        "Voice"
      ],
      "total": 1000
    }
  ],
  "countryLimit": {
    "type": "ALLOWED",
    "deliveryMethods": [
      "SMS",
      "Voice"
    ],
    "countries": [
      "US",
      "CA"
    ]
  },
  "cooldownConfiguration": {
    "sms": {
      "enabled": True,
      "periods": [
        {
          "duration": 30,
          "timeUnit": "SECONDS"
        },
        {
          "duration": 2,
          "timeUnit": "MINUTES"
        },
        {
          "duration": 3,
          "timeUnit": "MINUTES"
        }
      ],
      "resendLimit": 5
    },
    "email": {
      "enabled": True,
      "periods": [
        {
          "duration": 30,
          "timeUnit": "SECONDS"
        },
        {
          "duration": 1,
          "timeUnit": "MINUTES"
        },
        {
          "duration": 2,
          "timeUnit": "MINUTES"
        }
      ],
      "resendLimit": 4
    },
    "voice": {
      "enabled": True,
      "periods": [
        {
          "duration": 40,
          "timeUnit": "SECONDS"
        },
        {
          "duration": 2,
          "timeUnit": "MINUTES"
        },
        {
          "duration": 4,
          "timeUnit": "MINUTES"
        }
      ],
      "groupBy": "USER_ID",
      "resendLimit": 6
    },
    "whatsApp": {
      "enabled": False
    }
  },
  "default": False
})
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}}/notificationsPolicies');
$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": "Notification policy with environment limit and country limitation and notification cooldown periods",\n    "quotas": [\n        {\n            "type": "ENVIRONMENT",\n            "deliveryMethods": [\n                "SMS",\n                "Voice"\n            ],\n            "total": 1000\n        }\n    ],\n    "countryLimit": {\n        "type": "ALLOWED",\n        "deliveryMethods": [\n            "SMS",\n            "Voice"\n        ],\n        "countries": [\n            "US",\n            "CA"\n        ]\n    },\n    "cooldownConfiguration":{\n        "sms":{\n            "enabled":true,\n            "periods":[\n                {"duration":30,"timeUnit":"SECONDS"},\n                {"duration":2,"timeUnit":"MINUTES"},\n                {"duration":3,"timeUnit":"MINUTES"}\n            ],\n            "resendLimit":5\n        },\n        "email":{\n            "enabled":true,\n            "periods":[\n                {"duration":30,"timeUnit":"SECONDS"},\n                {"duration":1,"timeUnit":"MINUTES"},\n                {"duration":2,"timeUnit":"MINUTES"}\n            ],\n            "resendLimit":4\n        },\n        "voice":{\n            "enabled":true,\n            "periods":[\n                {"duration":40,"timeUnit":"SECONDS"},\n                {"duration":2,"timeUnit":"MINUTES"},\n                {"duration":4,"timeUnit":"MINUTES"}\n            ],\n            "groupBy":"USER_ID",\n            "resendLimit":6\n        },\n        "whatsApp":{\n            "enabled":false\n        }\n    },\n    "default": false\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}}/notificationsPolicies")

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": "Notification policy with environment limit and country limitation and notification cooldown periods",
  "quotas": [
    {
      "type": "ENVIRONMENT",
      "deliveryMethods": [
        "SMS",
        "Voice"
      ],
      "total": 1000
    }
  ],
  "countryLimit": {
    "type": "ALLOWED",
    "deliveryMethods": [
      "SMS",
      "Voice"
    ],
    "countries": [
      "US",
      "CA"
    ]
  },
  "cooldownConfiguration": {
    "sms": {
      "enabled": true,
      "periods": [
        {
          "duration": 30,
          "timeUnit": "SECONDS"
        },
        {
          "duration": 2,
          "timeUnit": "MINUTES"
        },
        {
          "duration": 3,
          "timeUnit": "MINUTES"
        }
      ],
      "resendLimit": 5
    },
    "email": {
      "enabled": true,
      "periods": [
        {
          "duration": 30,
          "timeUnit": "SECONDS"
        },
        {
          "duration": 1,
          "timeUnit": "MINUTES"
        },
        {
          "duration": 2,
          "timeUnit": "MINUTES"
        }
      ],
      "resendLimit": 4
    },
    "voice": {
      "enabled": true,
      "periods": [
        {
          "duration": 40,
          "timeUnit": "SECONDS"
        },
        {
          "duration": 2,
          "timeUnit": "MINUTES"
        },
        {
          "duration": 4,
          "timeUnit": "MINUTES"
        }
      ],
      "groupBy": "USER_ID",
      "resendLimit": 6
    },
    "whatsApp": {
      "enabled": false
    }
  },
  "default": false
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"name\": \"Notification policy with environment limit and country limitation and notification cooldown periods\",\n    \"quotas\": [\n        {\n            \"type\": \"ENVIRONMENT\",\n            \"deliveryMethods\": [\n                \"SMS\",\n                \"Voice\"\n            ],\n            \"total\": 1000\n        }\n    ],\n    \"countryLimit\": {\n        \"type\": \"ALLOWED\",\n        \"deliveryMethods\": [\n            \"SMS\",\n            \"Voice\"\n        ],\n        \"countries\": [\n            \"US\",\n            \"CA\"\n        ]\n    },\n    \"cooldownConfiguration\":{\n        \"sms\":{\n            \"enabled\":true,\n            \"periods\":[\n                {\"duration\":30,\"timeUnit\":\"SECONDS\"},\n                {\"duration\":2,\"timeUnit\":\"MINUTES\"},\n                {\"duration\":3,\"timeUnit\":\"MINUTES\"}\n            ],\n            \"resendLimit\":5\n        },\n        \"email\":{\n            \"enabled\":true,\n            \"periods\":[\n                {\"duration\":30,\"timeUnit\":\"SECONDS\"},\n                {\"duration\":1,\"timeUnit\":\"MINUTES\"},\n                {\"duration\":2,\"timeUnit\":\"MINUTES\"}\n            ],\n            \"resendLimit\":4\n        },\n        \"voice\":{\n            \"enabled\":true,\n            \"periods\":[\n                {\"duration\":40,\"timeUnit\":\"SECONDS\"},\n                {\"duration\":2,\"timeUnit\":\"MINUTES\"},\n                {\"duration\":4,\"timeUnit\":\"MINUTES\"}\n            ],\n            \"groupBy\":\"USER_ID\",\n            \"resendLimit\":6\n        },\n        \"whatsApp\":{\n            \"enabled\":false\n        }\n    },\n    \"default\": false\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/notificationsPolicies")!,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/notificationsPolicies/fddf9546-8e61-4c40-8861-7e933b62ab39"
        },
        "environment": {
            "href": "https://api.pingone.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "fddf9546-8e61-4c40-8861-7e933b62ab39",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "name": "Notification policy with environment limit and country limitation and notification cooldown periods",
    "quotas": [
        {
            "type": "ENVIRONMENT",
            "deliveryMethods": [
                "SMS",
                "Voice"
            ],
            "total": 1000
        }
    ],
    "countryLimit": {
        "type": "ALLOWED",
        "deliveryMethods": [
            "SMS",
            "Voice"
        ],
        "countries": [
            "US",
            "CA"
        ]
    },
    "updatedAt": "2025-03-30T11:54:29.323Z",
    "createdAt": "2025-03-30T11:54:29.326Z",
    "cooldownConfiguration": {
        "sms": {
            "enabled": true,
            "periods": [
                {
                    "duration": 30,
                    "timeUnit": "SECONDS"
                },
                {
                    "duration": 2,
                    "timeUnit": "MINUTES"
                },
                {
                    "duration": 3,
                    "timeUnit": "MINUTES"
                }
            ],
            "resendLimit": 5
        },
        "email": {
            "enabled": true,
            "periods": [
                {
                    "duration": 30,
                    "timeUnit": "SECONDS"
                },
                {
                    "duration": 1,
                    "timeUnit": "MINUTES"
                },
                {
                    "duration": 2,
                    "timeUnit": "MINUTES"
                }
            ],
            "resendLimit": 4
        },
        "voice": {
            "enabled": true,
            "groupBy": "USER_ID",
            "periods": [
                {
                    "duration": 40,
                    "timeUnit": "SECONDS"
                },
                {
                    "duration": 2,
                    "timeUnit": "MINUTES"
                },
                {
                    "duration": 4,
                    "timeUnit": "MINUTES"
                }
            ],
            "resendLimit": 6
        },
        "whatsApp": {
            "enabled": false
        }
    },
    "default": false
}