Step 9: Create a transaction SMS template
POST {{apiPath}}/environments/{{envID}}/templates/transaction/contents
Use the POST {{apiPath}}/environments/{{envID}}/templates/transaction/contents operation to create a transaction template that specifies the transaction information and provides a variable for the one-time passcode.
The body of the request specifies the locale property to identify the language for the content. In thi use case, this value is the environment’s default language.
The content property defines the message text the end user receives to complete the transaction. In this use case, the message is Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}. The ${sum}, ${currency}, and ${recipient} variable values in the transaction approval text are encoded in the request JWT, which is created in Step 15.
The deliveryMethod property specifies the MFA device type that receives the transaction approval request. In this use case, SMS is the delivery method.
Example Request
-
cURL
-
C#
-
Go
-
HTTP
-
Java
-
jQuery
-
NodeJS
-
Python
-
PHP
-
Ruby
-
Swift
curl --location --globoff '{{apiPath}}/environments/{{envID}}/templates/transaction/contents' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"locale": "en",
"content": "Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}",
"deliveryMethod": "SMS"
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/templates/transaction/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" +
@" ""content"": ""Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}""," + "\n" +
@" ""deliveryMethod"": ""SMS""" + "\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/transaction/contents"
method := "POST"
payload := strings.NewReader(`{
"locale": "en",
"content": "Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}",
"deliveryMethod": "SMS"
}`)
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/transaction/contents HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}
{
"locale": "en",
"content": "Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}",
"deliveryMethod": "SMS"
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"locale\": \"en\",\n \"content\": \"Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}\",\n \"deliveryMethod\": \"SMS\"\n}");
Request request = new Request.Builder()
.url("{{apiPath}}/environments/{{envID}}/templates/transaction/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/transaction/contents",
"method": "POST",
"timeout": 0,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{accessToken}}"
},
"data": JSON.stringify({
"locale": "en",
"content": "Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}",
"deliveryMethod": "SMS"
}),
};
$.ajax(settings).done(function (response) {
console.log(response);
});
var request = require('request');
var options = {
'method': 'POST',
'url': '{{apiPath}}/environments/{{envID}}/templates/transaction/contents',
'headers': {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{accessToken}}'
},
body: JSON.stringify({
"locale": "en",
"content": "Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}",
"deliveryMethod": "SMS"
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{{apiPath}}/environments/{{envID}}/templates/transaction/contents"
payload = json.dumps({
"locale": "en",
"content": "Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}",
"deliveryMethod": "SMS"
})
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/transaction/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 "content": "Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}",\n "deliveryMethod": "SMS"\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/transaction/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",
"content": "Approve this transfer of \${sum} \${currency} to \${recipient}, by entering this OTP: \${OTP}",
"deliveryMethod": "SMS"
})
response = http.request(request)
puts response.read_body
let parameters = "{\n \"locale\": \"en\",\n \"content\": \"Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}\",\n \"deliveryMethod\": \"SMS\"\n}"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/templates/transaction/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/transaction/contents/d08daa29-c056-41b4-b1d0-e21eda08f7a0"
},
"template": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/templates/transaction"
},
"environment": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
}
},
"id": "d08daa29-c056-41b4-b1d0-e21eda08f7a0",
"environment": {
"id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
},
"createdAt": "2022-10-28T14:30:57.021Z",
"updatedAt": "2022-10-28T14:30:57.021Z",
"locale": "en",
"template": {
"id": "transaction"
},
"content": "Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}",
"deliveryMethod": "SMS",
"default": false
}