Save the 10DLC wizard draft (partial)
curl --request PUT \
--url https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"brand": {
"display_name": "Acme Rewards",
"email": "compliance@acme.example"
},
"current_step": "brand"
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft"
payload = {
"brand": {
"display_name": "Acme Rewards",
"email": "compliance@acme.example"
},
"current_step": "brand"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
brand: {display_name: 'Acme Rewards', email: 'compliance@acme.example'},
current_step: 'brand'
})
};
fetch('https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft', 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/compliance/10dlc/wizard/draft",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'brand' => [
'display_name' => 'Acme Rewards',
'email' => 'compliance@acme.example'
],
'current_step' => 'brand'
]),
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/compliance/10dlc/wizard/draft"
payload := strings.NewReader("{\n \"brand\": {\n \"display_name\": \"Acme Rewards\",\n \"email\": \"compliance@acme.example\"\n },\n \"current_step\": \"brand\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"brand\": {\n \"display_name\": \"Acme Rewards\",\n \"email\": \"compliance@acme.example\"\n },\n \"current_step\": \"brand\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"brand\": {\n \"display_name\": \"Acme Rewards\",\n \"email\": \"compliance@acme.example\"\n },\n \"current_step\": \"brand\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"state": "in_progress",
"current_step": "brand",
"next_action": "fill_brand"
},
"meta": {
"request_id": "req_9s8d7f6g5h4j",
"timestamp": "2026-08-03T12:34:56.000Z"
}
}Compliance
Save the 10DLC wizard draft (partial)
Partial-saves the 10DLC registration wizard draft — send any subset of brand fields, campaign fields, and/or the current step and they are merged into the persisted draft so operators can save and resume across sessions. Every field is optional, but the request must include at least one of brand, campaign, or current_step. Returns the recomputed wizard progress. Owner/admin only.
PUT
/
api
/
v1
/
compliance
/
10dlc
/
wizard
/
draft
Save the 10DLC wizard draft (partial)
curl --request PUT \
--url https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"brand": {
"display_name": "Acme Rewards",
"email": "compliance@acme.example"
},
"current_step": "brand"
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft"
payload = {
"brand": {
"display_name": "Acme Rewards",
"email": "compliance@acme.example"
},
"current_step": "brand"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
brand: {display_name: 'Acme Rewards', email: 'compliance@acme.example'},
current_step: 'brand'
})
};
fetch('https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft', 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/compliance/10dlc/wizard/draft",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'brand' => [
'display_name' => 'Acme Rewards',
'email' => 'compliance@acme.example'
],
'current_step' => 'brand'
]),
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/compliance/10dlc/wizard/draft"
payload := strings.NewReader("{\n \"brand\": {\n \"display_name\": \"Acme Rewards\",\n \"email\": \"compliance@acme.example\"\n },\n \"current_step\": \"brand\"\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"brand\": {\n \"display_name\": \"Acme Rewards\",\n \"email\": \"compliance@acme.example\"\n },\n \"current_step\": \"brand\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/compliance/10dlc/wizard/draft")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"brand\": {\n \"display_name\": \"Acme Rewards\",\n \"email\": \"compliance@acme.example\"\n },\n \"current_step\": \"brand\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"state": "in_progress",
"current_step": "brand",
"next_action": "fill_brand"
},
"meta": {
"request_id": "req_9s8d7f6g5h4j",
"timestamp": "2026-08-03T12:34:56.000Z"
}
}Authorizations
BearerApiKey
Dashboard JWT token from Clerk
Body
application/json
⌘I