Create Email Content
POST {{apiPath}}/environments/{{envID}}/templates/{{templateName}}/contents
The POST {{apiPath}}/environments/{{envID}}/templates/{{templateName}}/contents operation can be used to create a new customized email content resource associated with the template specified in the request URL.
Note that the email’s body should weigh no more than 100 KB, the subject should contain no more than 256 characters and the variables restrictions should apply. Additionally, "noreply@pingidentity.com" is used as 'From' by default.
|
Trial License Environments: If your environment has a trial license, you cannot use the built-in PingOne email service (@pingone.com) to send custom email notifications. You cannot create custom email notification contents unless you use a custom email domain or your own SMTP server. If you need to use the built-in PingOne email service, your email notifications must use the predefined default email content. |
|
Before you create or update a custom content, you should always do a GET Read One Template on the notification template to determine its supported variables. |
Prerequisites
-
Refer to Notifications for important overview information.
-
Use Read All Templates to retrieve a list of all notifications templates associated with the environment and select the specific
templateNamefor the endpoint. For more information, refer to Notifications Templates.
Request Model
| Property | Type | Required? |
|---|---|---|
|
String |
Required |
|
String |
Required |
|
String |
Optional |
|
String |
Optional |
|
String |
Required |
|
String |
Optional |
|
String |
Optional |
|
String |
Optional |
|
String |
Required |
|
String |
Optional |
Refer to the Notifications templates property data models for full property descriptions.
Body
raw ( application/json )
{
"locale": "en",
"subject": "PingOne: Finish pairing your device",
"variant": "variant_C",
"body": "To finish pairing your device, enter this code: ${OTP}",
"deliveryMethod": "Email",
"template": {
"id": "device_pairing"
},
"from": {
"name": "Someone",
"address": "someone@domain.com"
},
"replyTo": {
"name": "Reply",
"address": "reply@domain.com"
}
}
Example Request
-
cURL
-
C#
-
Go
-
HTTP
-
Java
-
jQuery
-
NodeJS
-
Python
-
PHP
-
Ruby
-
Swift
curl --location --globoff '{{apiPath}}/environments/{{envID}}/templates/{{templateName}}/contents' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data-raw '{
"locale": "en",
"subject": "PingOne: Finish pairing your device",
"variant": "variant_C",
"body": "To finish pairing your device, enter this code: ${OTP}",
"deliveryMethod": "Email",
"template": {
"id": "device_pairing"
},
"from": {
"name": "Someone",
"address": "someone@domain.com"
},
"replyTo": {
"name": "Reply",
"address": "reply@domain.com"
}
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/templates/{{templateName}}/contents")
{
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" +
@" ""locale"": ""en""," + "\n" +
@" ""subject"": ""PingOne: Finish pairing your device""," + "\n" +
@" ""variant"": ""variant_C""," + "\n" +
@" ""body"": ""To finish pairing your device, enter this code: ${OTP}""," + "\n" +
@" ""deliveryMethod"": ""Email""," + "\n" +
@" ""template"": {" + "\n" +
@" ""id"": ""device_pairing""" + "\n" +
@" }," + "\n" +
@" ""from"": {" + "\n" +
@" ""name"": ""Someone""," + "\n" +
@" ""address"": ""someone@domain.com""" + "\n" +
@" }," + "\n" +
@" ""replyTo"": {" + "\n" +
@" ""name"": ""Reply""," + "\n" +
@" ""address"": ""reply@domain.com""" + "\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}}/templates/{{templateName}}/contents"
method := "POST"
payload := strings.NewReader(`{
"locale": "en",
"subject": "PingOne: Finish pairing your device",
"variant": "variant_C",
"body": "To finish pairing your device, enter this code: ${OTP}",
"deliveryMethod": "Email",
"template": {
"id": "device_pairing"
},
"from": {
"name": "Someone",
"address": "someone@domain.com"
},
"replyTo": {
"name": "Reply",
"address": "reply@domain.com"
}
}`)
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}}/templates/{{templateName}}/contents HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}
{
"locale": "en",
"subject": "PingOne: Finish pairing your device",
"variant": "variant_C",
"body": "To finish pairing your device, enter this code: ${OTP}",
"deliveryMethod": "Email",
"template": {
"id": "device_pairing"
},
"from": {
"name": "Someone",
"address": "someone@domain.com"
},
"replyTo": {
"name": "Reply",
"address": "reply@domain.com"
}
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"locale\": \"en\",\n \"subject\": \"PingOne: Finish pairing your device\",\n \"variant\": \"variant_C\",\n \"body\": \"To finish pairing your device, enter this code: ${OTP}\",\n \"deliveryMethod\": \"Email\",\n \"template\": {\n \"id\": \"device_pairing\"\n },\n \"from\": {\n \"name\": \"Someone\",\n \"address\": \"someone@domain.com\"\n },\n \"replyTo\": {\n \"name\": \"Reply\",\n \"address\": \"reply@domain.com\"\n }\n}");
Request request = new Request.Builder()
.url("{{apiPath}}/environments/{{envID}}/templates/{{templateName}}/contents")
.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}}/templates/{{templateName}}/contents",
"method": "POST",
"timeout": 0,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{accessToken}}"
},
"data": JSON.stringify({
"locale": "en",
"subject": "PingOne: Finish pairing your device",
"variant": "variant_C",
"body": "To finish pairing your device, enter this code: ${OTP}",
"deliveryMethod": "Email",
"template": {
"id": "device_pairing"
},
"from": {
"name": "Someone",
"address": "someone@domain.com"
},
"replyTo": {
"name": "Reply",
"address": "reply@domain.com"
}
}),
};
$.ajax(settings).done(function (response) {
console.log(response);
});
var request = require('request');
var options = {
'method': 'POST',
'url': '{{apiPath}}/environments/{{envID}}/templates/{{templateName}}/contents',
'headers': {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{accessToken}}'
},
body: JSON.stringify({
"locale": "en",
"subject": "PingOne: Finish pairing your device",
"variant": "variant_C",
"body": "To finish pairing your device, enter this code: ${OTP}",
"deliveryMethod": "Email",
"template": {
"id": "device_pairing"
},
"from": {
"name": "Someone",
"address": "someone@domain.com"
},
"replyTo": {
"name": "Reply",
"address": "reply@domain.com"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{{apiPath}}/environments/{{envID}}/templates/{{templateName}}/contents"
payload = json.dumps({
"locale": "en",
"subject": "PingOne: Finish pairing your device",
"variant": "variant_C",
"body": "To finish pairing your device, enter this code: ${OTP}",
"deliveryMethod": "Email",
"template": {
"id": "device_pairing"
},
"from": {
"name": "Someone",
"address": "someone@domain.com"
},
"replyTo": {
"name": "Reply",
"address": "reply@domain.com"
}
})
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}}/templates/{{templateName}}/contents');
$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 "locale": "en",\n "subject": "PingOne: Finish pairing your device",\n "variant": "variant_C",\n "body": "To finish pairing your device, enter this code: ${OTP}",\n "deliveryMethod": "Email",\n "template": {\n "id": "device_pairing"\n },\n "from": {\n "name": "Someone",\n "address": "someone@domain.com"\n },\n "replyTo": {\n "name": "Reply",\n "address": "reply@domain.com"\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}}/templates/{{templateName}}/contents")
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({
"locale": "en",
"subject": "PingOne: Finish pairing your device",
"variant": "variant_C",
"body": "To finish pairing your device, enter this code: \${OTP}",
"deliveryMethod": "Email",
"template": {
"id": "device_pairing"
},
"from": {
"name": "Someone",
"address": "someone@domain.com"
},
"replyTo": {
"name": "Reply",
"address": "reply@domain.com"
}
})
response = http.request(request)
puts response.read_body
let parameters = "{\n \"locale\": \"en\",\n \"subject\": \"PingOne: Finish pairing your device\",\n \"variant\": \"variant_C\",\n \"body\": \"To finish pairing your device, enter this code: ${OTP}\",\n \"deliveryMethod\": \"Email\",\n \"template\": {\n \"id\": \"device_pairing\"\n },\n \"from\": {\n \"name\": \"Someone\",\n \"address\": \"someone@domain.com\"\n },\n \"replyTo\": {\n \"name\": \"Reply\",\n \"address\": \"reply@domain.com\"\n }\n}"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/templates/{{templateName}}/contents")!,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.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/templates/device_pairing/contents/65806d66-10eb-4732-9c15-461738cc8aae"
},
"template" : {
"href" : "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/templates/device_pairing"
},
"environment" : {
"href" : "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
}
},
"id" : "65806d66-10eb-4732-9c15-461738cc8aae",
"environment" : {
"id" : "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
},
"createdAt" : "2021-11-08T08:54:32.327Z",
"updatedAt" : "2021-11-08T08:54:32.327Z",
"locale" : "en",
"variant": "variant_C",
"template" : {
"id" : "device_pairing"
},
"from" : {
"name" : "Someone",
"address" : "someone@domain.com"
},
"replyTo" : {
"name" : "Reply",
"address" : "reply@domain.com"
},
"subject" : "PingOne: Finish pairing your device",
"body" : "To finish pairing your device, enter this code: ${OTP}",
"deliveryMethod" : "Email",
"default" : false
}