curl --request POST \
--url https://api.orbit.devotel.io/api/v1/numbers/hosted-messaging \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"phoneNumber": "+14155550123",
"voiceCarrier": "AT&T",
"numberType": "landline",
"businessName": "Acme Inc",
"inboundRoute": {
"type": "webhook",
"target": "https://hooks.example.com/inbound-sms"
}
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/numbers/hosted-messaging"
payload = {
"phoneNumber": "+14155550123",
"voiceCarrier": "AT&T",
"numberType": "landline",
"businessName": "Acme Inc",
"inboundRoute": {
"type": "webhook",
"target": "https://hooks.example.com/inbound-sms"
}
}
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({
phoneNumber: '+14155550123',
voiceCarrier: 'AT&T',
numberType: 'landline',
businessName: 'Acme Inc',
inboundRoute: {type: 'webhook', target: 'https://hooks.example.com/inbound-sms'}
})
};
fetch('https://api.orbit.devotel.io/api/v1/numbers/hosted-messaging', 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://api.orbit.devotel.io/api/v1/numbers/hosted-messaging",
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([
'phoneNumber' => '+14155550123',
'voiceCarrier' => 'AT&T',
'numberType' => 'landline',
'businessName' => 'Acme Inc',
'inboundRoute' => [
'type' => 'webhook',
'target' => 'https://hooks.example.com/inbound-sms'
]
]),
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://api.orbit.devotel.io/api/v1/numbers/hosted-messaging"
payload := strings.NewReader("{\n \"phoneNumber\": \"+14155550123\",\n \"voiceCarrier\": \"AT&T\",\n \"numberType\": \"landline\",\n \"businessName\": \"Acme Inc\",\n \"inboundRoute\": {\n \"type\": \"webhook\",\n \"target\": \"https://hooks.example.com/inbound-sms\"\n }\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://api.orbit.devotel.io/api/v1/numbers/hosted-messaging")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"phoneNumber\": \"+14155550123\",\n \"voiceCarrier\": \"AT&T\",\n \"numberType\": \"landline\",\n \"businessName\": \"Acme Inc\",\n \"inboundRoute\": {\n \"type\": \"webhook\",\n \"target\": \"https://hooks.example.com/inbound-sms\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/numbers/hosted-messaging")
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 \"phoneNumber\": \"+14155550123\",\n \"voiceCarrier\": \"AT&T\",\n \"numberType\": \"landline\",\n \"businessName\": \"Acme Inc\",\n \"inboundRoute\": {\n \"type\": \"webhook\",\n \"target\": \"https://hooks.example.com/inbound-sms\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"phoneNumber": "<string>",
"voiceCarrier": "<string>",
"numberType": "landline",
"status": "draft",
"inboundRoute": {
"type": "webhook",
"target": "<string>"
},
"businessName": "<string>",
"loaFileUrl": "<string>",
"loaSignedAt": "2023-11-07T05:31:56Z",
"submittedAt": "2023-11-07T05:31:56Z",
"activatedAt": "2023-11-07T05:31:56Z",
"rejectionReason": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Open a hosted-messaging order
Open a new hosted-messaging order to text-enable an existing landline, toll-free, or mobile number without porting it — the number’s voice service stays with its current carrier. Supply the E.164 phoneNumber, the voiceCarrier of record, the numberType, and the inboundRoute that inbound SMS should be delivered to once the order is active. The order starts in draft; sign the LOA and submit it to progress. A second in-flight order for the same number is rejected. Requires the numbers:write scope.
curl --request POST \
--url https://api.orbit.devotel.io/api/v1/numbers/hosted-messaging \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"phoneNumber": "+14155550123",
"voiceCarrier": "AT&T",
"numberType": "landline",
"businessName": "Acme Inc",
"inboundRoute": {
"type": "webhook",
"target": "https://hooks.example.com/inbound-sms"
}
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/numbers/hosted-messaging"
payload = {
"phoneNumber": "+14155550123",
"voiceCarrier": "AT&T",
"numberType": "landline",
"businessName": "Acme Inc",
"inboundRoute": {
"type": "webhook",
"target": "https://hooks.example.com/inbound-sms"
}
}
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({
phoneNumber: '+14155550123',
voiceCarrier: 'AT&T',
numberType: 'landline',
businessName: 'Acme Inc',
inboundRoute: {type: 'webhook', target: 'https://hooks.example.com/inbound-sms'}
})
};
fetch('https://api.orbit.devotel.io/api/v1/numbers/hosted-messaging', 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://api.orbit.devotel.io/api/v1/numbers/hosted-messaging",
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([
'phoneNumber' => '+14155550123',
'voiceCarrier' => 'AT&T',
'numberType' => 'landline',
'businessName' => 'Acme Inc',
'inboundRoute' => [
'type' => 'webhook',
'target' => 'https://hooks.example.com/inbound-sms'
]
]),
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://api.orbit.devotel.io/api/v1/numbers/hosted-messaging"
payload := strings.NewReader("{\n \"phoneNumber\": \"+14155550123\",\n \"voiceCarrier\": \"AT&T\",\n \"numberType\": \"landline\",\n \"businessName\": \"Acme Inc\",\n \"inboundRoute\": {\n \"type\": \"webhook\",\n \"target\": \"https://hooks.example.com/inbound-sms\"\n }\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://api.orbit.devotel.io/api/v1/numbers/hosted-messaging")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"phoneNumber\": \"+14155550123\",\n \"voiceCarrier\": \"AT&T\",\n \"numberType\": \"landline\",\n \"businessName\": \"Acme Inc\",\n \"inboundRoute\": {\n \"type\": \"webhook\",\n \"target\": \"https://hooks.example.com/inbound-sms\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/numbers/hosted-messaging")
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 \"phoneNumber\": \"+14155550123\",\n \"voiceCarrier\": \"AT&T\",\n \"numberType\": \"landline\",\n \"businessName\": \"Acme Inc\",\n \"inboundRoute\": {\n \"type\": \"webhook\",\n \"target\": \"https://hooks.example.com/inbound-sms\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"phoneNumber": "<string>",
"voiceCarrier": "<string>",
"numberType": "landline",
"status": "draft",
"inboundRoute": {
"type": "webhook",
"target": "<string>"
},
"businessName": "<string>",
"loaFileUrl": "<string>",
"loaSignedAt": "2023-11-07T05:31:56Z",
"submittedAt": "2023-11-07T05:31:56Z",
"activatedAt": "2023-11-07T05:31:56Z",
"rejectionReason": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Authorizations
Dashboard JWT token from Clerk
Body
Fields required to open a new hosted-messaging order.
E.164 number to text-enable (e.g. +14155550123). Its voice service stays with the current carrier.
Carrier of record that keeps voice service for the number (informational).
1 - 200Number class the hosting carrier will text-enable.
landline, tollfree, mobile Delivery target for inbound SMS received on a hosted (text-enabled) number once the order is active. Inbound only — no outbound (MT) path is created.
Show child attributes
Show child attributes
Business / brand name on the carrier-of-record account (used for LOA matching).
1 - 200