PingOne Platform APIs

Create Phone Delivery Settings (Twilio Messaging Service)

POST {{apiPath}}/environments/{{envID}}/notificationsSettings/phoneDeliverySettings

This example uses the phoneDeliverySettings endpoint to create a sender for sending notifications via a message service you have defined in your Twilio account.

Note that the provider parameter must by set to CUSTOM_TWILIO_MESSAGING_SERVICE.

Once the sender is created, send a PUT request to select the messaging service that should be used for sending the notifications.

Prerequisites

Refer to Notifications and Phone Delivery Settings for important overview information.

Request Model
Property Type Required?

authToken

String

Required

name

String

Required

provider

String

Required

sid

String

Required

Headers

Authorization      Bearer {{accessToken}}

Content-Type      application/json

Body

raw ( application/json )

{
    "name":"Twilio Messaging Services sender",
    "sid":"{{twilioMessagingServiceSID}}",
    "authToken":"{{twilioAuthToken}}",
    "provider":"CUSTOM_TWILIO_MESSAGING_SERVICE"
}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{apiPath}}/environments/{{envID}}/notificationsSettings/phoneDeliverySettings' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
    "name":"Twilio Messaging Services sender",
    "sid":"{{twilioMessagingServiceSID}}",
    "authToken":"{{twilioAuthToken}}",
    "provider":"CUSTOM_TWILIO_MESSAGING_SERVICE"
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/notificationsSettings/phoneDeliverySettings")
{
  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" +
@"    ""name"":""Twilio Messaging Services sender""," + "\n" +
@"    ""sid"":""{{twilioMessagingServiceSID}}""," + "\n" +
@"    ""authToken"":""{{twilioAuthToken}}""," + "\n" +
@"    ""provider"":""CUSTOM_TWILIO_MESSAGING_SERVICE""" + "\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}}/notificationsSettings/phoneDeliverySettings"
  method := "POST"

  payload := strings.NewReader(`{
    "name":"Twilio Messaging Services sender",
    "sid":"{{twilioMessagingServiceSID}}",
    "authToken":"{{twilioAuthToken}}",
    "provider":"CUSTOM_TWILIO_MESSAGING_SERVICE"
}`)

  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}}/notificationsSettings/phoneDeliverySettings HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}

{
    "name":"Twilio Messaging Services sender",
    "sid":"{{twilioMessagingServiceSID}}",
    "authToken":"{{twilioAuthToken}}",
    "provider":"CUSTOM_TWILIO_MESSAGING_SERVICE"
}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n    \"name\":\"Twilio Messaging Services sender\",\n    \"sid\":\"{{twilioMessagingServiceSID}}\",\n    \"authToken\":\"{{twilioAuthToken}}\",\n    \"provider\":\"CUSTOM_TWILIO_MESSAGING_SERVICE\"\n}");
Request request = new Request.Builder()
  .url("{{apiPath}}/environments/{{envID}}/notificationsSettings/phoneDeliverySettings")
  .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}}/notificationsSettings/phoneDeliverySettings",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "Content-Type": "application/json",
    "Authorization": "Bearer {{accessToken}}"
  },
  "data": JSON.stringify({
    "name": "Twilio Messaging Services sender",
    "sid": "{{twilioMessagingServiceSID}}",
    "authToken": "{{twilioAuthToken}}",
    "provider": "CUSTOM_TWILIO_MESSAGING_SERVICE"
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{apiPath}}/environments/{{envID}}/notificationsSettings/phoneDeliverySettings',
  'headers': {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {{accessToken}}'
  },
  body: JSON.stringify({
    "name": "Twilio Messaging Services sender",
    "sid": "{{twilioMessagingServiceSID}}",
    "authToken": "{{twilioAuthToken}}",
    "provider": "CUSTOM_TWILIO_MESSAGING_SERVICE"
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
import requests
import json

url = "{{apiPath}}/environments/{{envID}}/notificationsSettings/phoneDeliverySettings"

payload = json.dumps({
  "name": "Twilio Messaging Services sender",
  "sid": "{{twilioMessagingServiceSID}}",
  "authToken": "{{twilioAuthToken}}",
  "provider": "CUSTOM_TWILIO_MESSAGING_SERVICE"
})
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}}/notificationsSettings/phoneDeliverySettings');
$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    "name":"Twilio Messaging Services sender",\n    "sid":"{{twilioMessagingServiceSID}}",\n    "authToken":"{{twilioAuthToken}}",\n    "provider":"CUSTOM_TWILIO_MESSAGING_SERVICE"\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}}/notificationsSettings/phoneDeliverySettings")

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({
  "name": "Twilio Messaging Services sender",
  "sid": "{{twilioMessagingServiceSID}}",
  "authToken": "{{twilioAuthToken}}",
  "provider": "CUSTOM_TWILIO_MESSAGING_SERVICE"
})

response = http.request(request)
puts response.read_body
let parameters = "{\n    \"name\":\"Twilio Messaging Services sender\",\n    \"sid\":\"{{twilioMessagingServiceSID}}\",\n    \"authToken\":\"{{twilioAuthToken}}\",\n    \"provider\":\"CUSTOM_TWILIO_MESSAGING_SERVICE\"\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/notificationsSettings/phoneDeliverySettings")!,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.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/notificationsSettings/phoneDeliverySettings/420cd60b-8b61-4fc6-b179-a9cb78d4f93f"
        },
        "environment": {
            "href": "https://api.pingone.eu/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
        }
    },
    "id": "420cd60b-8b61-4fc6-b179-a9cb78d4f93f",
    "environment": {
        "id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
    },
    "name": "Twilio Messaging Services sender",
    "createdAt": "2026-04-23T13:28:25.644Z",
    "updatedAt": "2026-04-23T13:28:25.644Z",
    "provider": "CUSTOM_TWILIO_MESSAGING_SERVICE",
    "sid": "{{twilioMessagingServiceSID}}",
    "messagingServices": [
        {
            "selected": false,
            "name": "pingid",
            "messagingServiceId": "MG0fea65a6453e95e74c378237ad515896"
        },
        {
            "selected": false,
            "name": "Default Messaging Service for Conversations",
            "messagingServiceId": "MG465d7bf41867734f6ad964f3da781117"
        },
        {
            "selected": false,
            "name": "Test additional sid",
            "messagingServiceId": "MG4a3b7c403917b8d5e2b8792b20abf380"
        }
    ]
}