---
title: Create Email Content
description: The POST {{apiPath}}/v1/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.
component: pingone-api
page_id: pingone-api:platform:notifications/notifications-templates/create-email-content
canonical_url: https://developer.pingidentity.com/pingone-api/platform/notifications/notifications-templates/create-email-content.html
section_ids:
  prerequisites: Prerequisites
  headers: Headers
  body: Body
  example-request: Example Request
  example-response: Example Response
---

# Create Email Content

##

```none
POST {{apiPath}}/v1/environments/{{envID}}/templates/{{templateName}}/contents
```

The `POST {{apiPath}}/v1/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](../notifications-templates.html#notifications-templates-creating-custom-contents). 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](read-one-template.html) on the notification template to determine its supported variables. |

### Prerequisites

* Refer to [Notifications](../../notifications.html) for important overview information.

* Use [Read All Templates](read-all-templates.html) 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](../notifications-templates.html).

> **Collapse: 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](../notifications-templates.html#notifications-templates-properties) for full property descriptions.

### Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

### Body

raw ( application/json )

```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

```shell
curl --location --globoff '{{apiPath}}/v1/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"
    }
}'
```

```csharp
var options = new RestClientOptions("{{apiPath}}/v1/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);
```

```golang
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "{{apiPath}}/v1/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))
}
```

```http
POST /v1/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"
    }
}
```

```java
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}}/v1/environments/{{envID}}/templates/{{templateName}}/contents")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
```

```javascript
var settings = {
  "url": "{{apiPath}}/v1/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);
});
```

```javascript
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/v1/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);
});
```

```python
import requests
import json

url = "{{apiPath}}/v1/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
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/v1/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();
}
```

```ruby
require "uri"
require "json"
require "net/http"

url = URI("{{apiPath}}/v1/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
```

```swift
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}}/v1/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

```json
{
  "_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
}
```
