PingOne Platform APIs

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 templateName for the endpoint. For more information, refer to Notifications Templates.

Request Model
Property Type Required?

body

String

Required

deliveryMethod

String

Required

from.address

String

Optional

from.name

String

Optional

locale

String

Required

replyTo.address

String

Optional

replyTo.name

String

Optional

subject

String

Optional

template.id

String

Required

variant

String

Optional

Refer to the Notifications templates property data models for full property descriptions.

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

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
}