PingOne Platform APIs

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.

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "locale": "en",
    "content": "Approve this transfer of ${sum} ${currency} to ${recipient}, by entering this OTP: ${OTP}",
    "deliveryMethod": "SMS"
}

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
}