curl --request PATCH \
--url https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"programBrief": {
"useCase": "2FA",
"description": "One-time passcodes for account sign-in and password resets.",
"sampleMessages": [
"Your Acme verification code is 481920. It expires in 10 minutes."
],
"messageFrequency": "1-3 msgs per login attempt",
"optInDescription": "Users opt in during sign-up by checking the SMS-verification box.",
"supportContact": "support@acme.example",
"privacyPolicyUrl": "https://acme.example/privacy",
"termsUrl": "https://acme.example/terms"
}
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief"
payload = { "programBrief": {
"useCase": "2FA",
"description": "One-time passcodes for account sign-in and password resets.",
"sampleMessages": ["Your Acme verification code is 481920. It expires in 10 minutes."],
"messageFrequency": "1-3 msgs per login attempt",
"optInDescription": "Users opt in during sign-up by checking the SMS-verification box.",
"supportContact": "support@acme.example",
"privacyPolicyUrl": "https://acme.example/privacy",
"termsUrl": "https://acme.example/terms"
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
programBrief: {
useCase: '2FA',
description: 'One-time passcodes for account sign-in and password resets.',
sampleMessages: ['Your Acme verification code is 481920. It expires in 10 minutes.'],
messageFrequency: '1-3 msgs per login attempt',
optInDescription: 'Users opt in during sign-up by checking the SMS-verification box.',
supportContact: 'support@acme.example',
privacyPolicyUrl: 'https://acme.example/privacy',
termsUrl: 'https://acme.example/terms'
}
})
};
fetch('https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief', 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/short-codes/{id}/brief",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'programBrief' => [
'useCase' => '2FA',
'description' => 'One-time passcodes for account sign-in and password resets.',
'sampleMessages' => [
'Your Acme verification code is 481920. It expires in 10 minutes.'
],
'messageFrequency' => '1-3 msgs per login attempt',
'optInDescription' => 'Users opt in during sign-up by checking the SMS-verification box.',
'supportContact' => 'support@acme.example',
'privacyPolicyUrl' => 'https://acme.example/privacy',
'termsUrl' => 'https://acme.example/terms'
]
]),
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/short-codes/{id}/brief"
payload := strings.NewReader("{\n \"programBrief\": {\n \"useCase\": \"2FA\",\n \"description\": \"One-time passcodes for account sign-in and password resets.\",\n \"sampleMessages\": [\n \"Your Acme verification code is 481920. It expires in 10 minutes.\"\n ],\n \"messageFrequency\": \"1-3 msgs per login attempt\",\n \"optInDescription\": \"Users opt in during sign-up by checking the SMS-verification box.\",\n \"supportContact\": \"support@acme.example\",\n \"privacyPolicyUrl\": \"https://acme.example/privacy\",\n \"termsUrl\": \"https://acme.example/terms\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"programBrief\": {\n \"useCase\": \"2FA\",\n \"description\": \"One-time passcodes for account sign-in and password resets.\",\n \"sampleMessages\": [\n \"Your Acme verification code is 481920. It expires in 10 minutes.\"\n ],\n \"messageFrequency\": \"1-3 msgs per login attempt\",\n \"optInDescription\": \"Users opt in during sign-up by checking the SMS-verification box.\",\n \"supportContact\": \"support@acme.example\",\n \"privacyPolicyUrl\": \"https://acme.example/privacy\",\n \"termsUrl\": \"https://acme.example/terms\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"programBrief\": {\n \"useCase\": \"2FA\",\n \"description\": \"One-time passcodes for account sign-in and password resets.\",\n \"sampleMessages\": [\n \"Your Acme verification code is 481920. It expires in 10 minutes.\"\n ],\n \"messageFrequency\": \"1-3 msgs per login attempt\",\n \"optInDescription\": \"Users opt in during sign-up by checking the SMS-verification box.\",\n \"supportContact\": \"support@acme.example\",\n \"privacyPolicyUrl\": \"https://acme.example/privacy\",\n \"termsUrl\": \"https://acme.example/terms\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "shortcode_01J9Z8ABCDEF",
"countryCode": "US",
"leaseType": "dedicated",
"selection": "random",
"requestedCode": null,
"assignedCode": null,
"leaseTermMonths": 12,
"status": "draft",
"businessName": "Acme Inc",
"createdAt": "2026-08-11T12:00:00.000Z",
"updatedAt": "2026-08-11T14:30:00.000Z",
"submittedAt": null,
"programBrief": {
"useCase": "2FA",
"description": "One-time passcodes for account sign-in and password resets.",
"sampleMessages": [
"Your Acme verification code is 481920. It expires in 10 minutes."
],
"messageFrequency": "1-3 messages per login attempt",
"optInDescription": "Subscribers opt in during sign-up by checking the SMS-verification box.",
"supportContact": "support@acme.example",
"privacyPolicyUrl": "https://acme.example/privacy",
"termsUrl": "https://acme.example/terms"
}
},
"meta": {
"request_id": "req_01J9Z8ABCDEF",
"timestamp": "2026-08-11T14:30:00.000Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "<string>",
"status": 429,
"retry_after": 2
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Update a short-code application's program brief
Edit the CTIA program brief on a drafted SMS short-code application — the use case, sample messages, message frequency, opt-in description, support contact, and privacy / terms URLs carriers vet. Use it to refine the brief while the application is still in draft, before it is submitted for the multi-week carrier review. Returns 409 if the application has already been submitted, and 404 if no application with that id belongs to the caller’s organization. Requires the numbers:write scope.
curl --request PATCH \
--url https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"programBrief": {
"useCase": "2FA",
"description": "One-time passcodes for account sign-in and password resets.",
"sampleMessages": [
"Your Acme verification code is 481920. It expires in 10 minutes."
],
"messageFrequency": "1-3 msgs per login attempt",
"optInDescription": "Users opt in during sign-up by checking the SMS-verification box.",
"supportContact": "support@acme.example",
"privacyPolicyUrl": "https://acme.example/privacy",
"termsUrl": "https://acme.example/terms"
}
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief"
payload = { "programBrief": {
"useCase": "2FA",
"description": "One-time passcodes for account sign-in and password resets.",
"sampleMessages": ["Your Acme verification code is 481920. It expires in 10 minutes."],
"messageFrequency": "1-3 msgs per login attempt",
"optInDescription": "Users opt in during sign-up by checking the SMS-verification box.",
"supportContact": "support@acme.example",
"privacyPolicyUrl": "https://acme.example/privacy",
"termsUrl": "https://acme.example/terms"
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
programBrief: {
useCase: '2FA',
description: 'One-time passcodes for account sign-in and password resets.',
sampleMessages: ['Your Acme verification code is 481920. It expires in 10 minutes.'],
messageFrequency: '1-3 msgs per login attempt',
optInDescription: 'Users opt in during sign-up by checking the SMS-verification box.',
supportContact: 'support@acme.example',
privacyPolicyUrl: 'https://acme.example/privacy',
termsUrl: 'https://acme.example/terms'
}
})
};
fetch('https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief', 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/short-codes/{id}/brief",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'programBrief' => [
'useCase' => '2FA',
'description' => 'One-time passcodes for account sign-in and password resets.',
'sampleMessages' => [
'Your Acme verification code is 481920. It expires in 10 minutes.'
],
'messageFrequency' => '1-3 msgs per login attempt',
'optInDescription' => 'Users opt in during sign-up by checking the SMS-verification box.',
'supportContact' => 'support@acme.example',
'privacyPolicyUrl' => 'https://acme.example/privacy',
'termsUrl' => 'https://acme.example/terms'
]
]),
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/short-codes/{id}/brief"
payload := strings.NewReader("{\n \"programBrief\": {\n \"useCase\": \"2FA\",\n \"description\": \"One-time passcodes for account sign-in and password resets.\",\n \"sampleMessages\": [\n \"Your Acme verification code is 481920. It expires in 10 minutes.\"\n ],\n \"messageFrequency\": \"1-3 msgs per login attempt\",\n \"optInDescription\": \"Users opt in during sign-up by checking the SMS-verification box.\",\n \"supportContact\": \"support@acme.example\",\n \"privacyPolicyUrl\": \"https://acme.example/privacy\",\n \"termsUrl\": \"https://acme.example/terms\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"programBrief\": {\n \"useCase\": \"2FA\",\n \"description\": \"One-time passcodes for account sign-in and password resets.\",\n \"sampleMessages\": [\n \"Your Acme verification code is 481920. It expires in 10 minutes.\"\n ],\n \"messageFrequency\": \"1-3 msgs per login attempt\",\n \"optInDescription\": \"Users opt in during sign-up by checking the SMS-verification box.\",\n \"supportContact\": \"support@acme.example\",\n \"privacyPolicyUrl\": \"https://acme.example/privacy\",\n \"termsUrl\": \"https://acme.example/terms\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/numbers/short-codes/{id}/brief")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"programBrief\": {\n \"useCase\": \"2FA\",\n \"description\": \"One-time passcodes for account sign-in and password resets.\",\n \"sampleMessages\": [\n \"Your Acme verification code is 481920. It expires in 10 minutes.\"\n ],\n \"messageFrequency\": \"1-3 msgs per login attempt\",\n \"optInDescription\": \"Users opt in during sign-up by checking the SMS-verification box.\",\n \"supportContact\": \"support@acme.example\",\n \"privacyPolicyUrl\": \"https://acme.example/privacy\",\n \"termsUrl\": \"https://acme.example/terms\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "shortcode_01J9Z8ABCDEF",
"countryCode": "US",
"leaseType": "dedicated",
"selection": "random",
"requestedCode": null,
"assignedCode": null,
"leaseTermMonths": 12,
"status": "draft",
"businessName": "Acme Inc",
"createdAt": "2026-08-11T12:00:00.000Z",
"updatedAt": "2026-08-11T14:30:00.000Z",
"submittedAt": null,
"programBrief": {
"useCase": "2FA",
"description": "One-time passcodes for account sign-in and password resets.",
"sampleMessages": [
"Your Acme verification code is 481920. It expires in 10 minutes."
],
"messageFrequency": "1-3 messages per login attempt",
"optInDescription": "Subscribers opt in during sign-up by checking the SMS-verification box.",
"supportContact": "support@acme.example",
"privacyPolicyUrl": "https://acme.example/privacy",
"termsUrl": "https://acme.example/terms"
}
},
"meta": {
"request_id": "req_01J9Z8ABCDEF",
"timestamp": "2026-08-11T14:30:00.000Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "<string>",
"status": 429,
"retry_after": 2
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Authorizations
Dashboard JWT token from Clerk
Headers
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
true, false Path Parameters
Resource identifier
1Body
The replacement program brief for the application.
The replacement program brief for the application.
The CTIA program brief carriers vet.
Show child attributes
Show child attributes