Score draft campaign content for deliverability (pre-flight)
curl --request POST \
--url https://api.orbit.devotel.io/api/v1/campaigns/deliverability-lab \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"body": "<string>",
"subject": "<string>"
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/campaigns/deliverability-lab"
payload = {
"body": "<string>",
"subject": "<string>"
}
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({body: JSON.stringify('<string>'), subject: '<string>'})
};
fetch('https://api.orbit.devotel.io/api/v1/campaigns/deliverability-lab', 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/campaigns/deliverability-lab",
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([
'body' => '<string>',
'subject' => '<string>'
]),
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/campaigns/deliverability-lab"
payload := strings.NewReader("{\n \"body\": \"<string>\",\n \"subject\": \"<string>\"\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/campaigns/deliverability-lab")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"body\": \"<string>\",\n \"subject\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/campaigns/deliverability-lab")
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 \"body\": \"<string>\",\n \"subject\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"channel": "<string>",
"content_risk": {
"applicable": true,
"score": 123,
"spam_score": 123,
"spam_hits": [
{}
],
"url_analysis": {
"url_count": 123,
"shortener_hosts": [
"<string>"
],
"has_raw_ip_url": true,
"has_insecure_url": true
},
"findings": [
{
"id": "<string>",
"label": "<string>",
"matched": [
"<string>"
],
"suggestion": "<string>",
"weight": 123
}
]
},
"predicted_delivery": {
"has_history": true,
"overall_predicted_rate": 123,
"overall_historical_rate": 123,
"total_sample": 123,
"carriers": [
{
"mccmnc": "<string>",
"carrier_name": "<string>",
"country": "<string>",
"terminal": 123,
"delivered": 123,
"historical_delivery_rate": 123,
"content_penalty_points": 123,
"predicted_delivery_rate": 123
}
]
},
"blocking_warnings": [
"<string>"
],
"advisories": [
"<string>"
],
"ready_to_send": true,
"evaluated_at": "2023-11-07T05:31:56Z"
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Campaigns
Score draft campaign content for deliverability (pre-flight)
Score a draft campaign before you send it. Pass the draft message content and channel in the request body (no saved campaign needed) and get back the content issues that could hurt deliverability — spam-trigger words and risky links — plus a predicted delivery rate for each destination carrier, based on your own historical delivery results. This check is read-only: it never sends your campaign, charges your wallet, or changes anything in your account.
POST
/
api
/
v1
/
campaigns
/
deliverability-lab
Score draft campaign content for deliverability (pre-flight)
curl --request POST \
--url https://api.orbit.devotel.io/api/v1/campaigns/deliverability-lab \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"body": "<string>",
"subject": "<string>"
}
'import requests
url = "https://api.orbit.devotel.io/api/v1/campaigns/deliverability-lab"
payload = {
"body": "<string>",
"subject": "<string>"
}
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({body: JSON.stringify('<string>'), subject: '<string>'})
};
fetch('https://api.orbit.devotel.io/api/v1/campaigns/deliverability-lab', 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/campaigns/deliverability-lab",
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([
'body' => '<string>',
'subject' => '<string>'
]),
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/campaigns/deliverability-lab"
payload := strings.NewReader("{\n \"body\": \"<string>\",\n \"subject\": \"<string>\"\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/campaigns/deliverability-lab")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"body\": \"<string>\",\n \"subject\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/campaigns/deliverability-lab")
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 \"body\": \"<string>\",\n \"subject\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"channel": "<string>",
"content_risk": {
"applicable": true,
"score": 123,
"spam_score": 123,
"spam_hits": [
{}
],
"url_analysis": {
"url_count": 123,
"shortener_hosts": [
"<string>"
],
"has_raw_ip_url": true,
"has_insecure_url": true
},
"findings": [
{
"id": "<string>",
"label": "<string>",
"matched": [
"<string>"
],
"suggestion": "<string>",
"weight": 123
}
]
},
"predicted_delivery": {
"has_history": true,
"overall_predicted_rate": 123,
"overall_historical_rate": 123,
"total_sample": 123,
"carriers": [
{
"mccmnc": "<string>",
"carrier_name": "<string>",
"country": "<string>",
"terminal": 123,
"delivered": 123,
"historical_delivery_rate": 123,
"content_penalty_points": 123,
"predicted_delivery_rate": 123
}
]
},
"blocking_warnings": [
"<string>"
],
"advisories": [
"<string>"
],
"ready_to_send": true,
"evaluated_at": "2023-11-07T05:31:56Z"
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
BearerApiKey
Dashboard JWT token from Clerk
Body
application/json
Campaign channel the draft content targets.
Available options:
sms, mms, whatsapp, email, rcs, viber, telegram, line, messenger, instagram, push, voice, fax Draft message body to score. Defaults to empty string.
Maximum string length:
10000Email-only subject line.
Maximum string length:
500Historical lookback window for the carrier delivery baseline. Defaults to 30d.
Available options:
7d, 30d, 90d ⌘I