curl --request POST \
--url https://your-instance.example.com/api/sms/providers/config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"provider": "twilio",
"twilioAccountSid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"twilioAuthToken": "your-twilio-auth-token",
"twilioMessagingServiceSid": "MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
'import requests
url = "https://your-instance.example.com/api/sms/providers/config"
payload = {
"provider": "twilio",
"twilioAccountSid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"twilioAuthToken": "your-twilio-auth-token",
"twilioMessagingServiceSid": "MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
provider: 'twilio',
twilioAccountSid: 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
twilioAuthToken: 'your-twilio-auth-token',
twilioMessagingServiceSid: 'MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
})
};
fetch('https://your-instance.example.com/api/sms/providers/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://your-instance.example.com/api/sms/providers/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'provider' => 'twilio',
'twilioAccountSid' => 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'twilioAuthToken' => 'your-twilio-auth-token',
'twilioMessagingServiceSid' => 'MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.example.com/api/sms/providers/config"
payload := strings.NewReader("{\n \"provider\": \"twilio\",\n \"twilioAccountSid\": \"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"twilioAuthToken\": \"your-twilio-auth-token\",\n \"twilioMessagingServiceSid\": \"MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://your-instance.example.com/api/sms/providers/config")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"provider\": \"twilio\",\n \"twilioAccountSid\": \"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"twilioAuthToken\": \"your-twilio-auth-token\",\n \"twilioMessagingServiceSid\": \"MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/sms/providers/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"provider\": \"twilio\",\n \"twilioAccountSid\": \"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"twilioAuthToken\": \"your-twilio-auth-token\",\n \"twilioMessagingServiceSid\": \"MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "twilio SMS configuration saved"
}{
"error": "Provider configuration not found"
}{
"error": "Provider configuration not found"
}{
"error": "Provider configuration not found"
}{
"error": "Provider configuration not found"
}Save SMS provider configuration
Upserts the credentials for a single SMS provider (twilio, sinch, or textgrid) on the caller’s organization. Whitespace is trimmed from every credential before persistence. Only fields relevant to the chosen provider are read; other fields are ignored. Requires SUPERADMIN.
curl --request POST \
--url https://your-instance.example.com/api/sms/providers/config \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"provider": "twilio",
"twilioAccountSid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"twilioAuthToken": "your-twilio-auth-token",
"twilioMessagingServiceSid": "MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
'import requests
url = "https://your-instance.example.com/api/sms/providers/config"
payload = {
"provider": "twilio",
"twilioAccountSid": "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"twilioAuthToken": "your-twilio-auth-token",
"twilioMessagingServiceSid": "MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
provider: 'twilio',
twilioAccountSid: 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
twilioAuthToken: 'your-twilio-auth-token',
twilioMessagingServiceSid: 'MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
})
};
fetch('https://your-instance.example.com/api/sms/providers/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://your-instance.example.com/api/sms/providers/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'provider' => 'twilio',
'twilioAccountSid' => 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'twilioAuthToken' => 'your-twilio-auth-token',
'twilioMessagingServiceSid' => 'MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-instance.example.com/api/sms/providers/config"
payload := strings.NewReader("{\n \"provider\": \"twilio\",\n \"twilioAccountSid\": \"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"twilioAuthToken\": \"your-twilio-auth-token\",\n \"twilioMessagingServiceSid\": \"MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://your-instance.example.com/api/sms/providers/config")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"provider\": \"twilio\",\n \"twilioAccountSid\": \"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"twilioAuthToken\": \"your-twilio-auth-token\",\n \"twilioMessagingServiceSid\": \"MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-instance.example.com/api/sms/providers/config")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"provider\": \"twilio\",\n \"twilioAccountSid\": \"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n \"twilioAuthToken\": \"your-twilio-auth-token\",\n \"twilioMessagingServiceSid\": \"MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "twilio SMS configuration saved"
}{
"error": "Provider configuration not found"
}{
"error": "Provider configuration not found"
}{
"error": "Provider configuration not found"
}{
"error": "Provider configuration not found"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Save credentials for a single SMS provider. Only the fields relevant to provider are read; others may be present but are ignored. All credential strings are trimmed before persistence.
Supported SMS providers. twilio and textgrid use the Twilio-compatible REST API; sinch uses Sinch Conversation API for SMS and a separate MMS service.
twilio, sinch, textgrid "twilio"
Required when provider is twilio.
Required when provider is twilio.
Optional but recommended when provider is twilio.
Required when provider is sinch.
Required when provider is sinch.
Optional Sinch MMS API key.
Optional Sinch MMS service identifier.
Required when provider is textgrid.
Required when provider is textgrid.