Deliverability
Check Email Copy for Spam Triggers
Analyse cold email copy with SpamAssassin: score, threshold, verdict and the rules that fired. Free, with a daily cap shared with the dashboard tool.
POST
/
v1
/
content-spam-check
Check Email Copy for Spam Triggers
curl --request POST \
--url https://api.orbisearch.com/v1/content-spam-check \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"content": "ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!",
"subject": "URGENT: claim your spot before midnight"
}
'import requests
url = "https://api.orbisearch.com/v1/content-spam-check"
payload = {
"content": "ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!",
"subject": "URGENT: claim your spot before midnight"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
content: 'ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!',
subject: 'URGENT: claim your spot before midnight'
})
};
fetch('https://api.orbisearch.com/v1/content-spam-check', 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.orbisearch.com/v1/content-spam-check",
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([
'content' => 'ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!',
'subject' => 'URGENT: claim your spot before midnight'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.orbisearch.com/v1/content-spam-check"
payload := strings.NewReader("{\n \"content\": \"ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!\",\n \"subject\": \"URGENT: claim your spot before midnight\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.orbisearch.com/v1/content-spam-check")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!\",\n \"subject\": \"URGENT: claim your spot before midnight\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbisearch.com/v1/content-spam-check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!\",\n \"subject\": \"URGENT: claim your spot before midnight\"\n}"
response = http.request(request)
puts response.read_body{
"score": 2.6,
"threshold": 5,
"verdict": "borderline",
"rules": [
{
"name": "MONEY_NOHTML",
"points": 2.5,
"description": "Plain-text message focused on large sums of money"
},
{
"name": "ACT_NOW_CAPS",
"points": 0.1,
"description": "Talks about 'acting now' with capitals"
}
]
}{
"detail": "API key required in X-API-Key header"
}{
"detail": "Invalid request body field 'content': String should have at least 1 character.",
"errors": [
{
"loc": "body.content",
"msg": "Invalid request body field 'content': String should have at least 1 character.",
"type": "string_too_short"
}
]
}{
"detail": "You've reached today's limit of 100 checks. Try again tomorrow.",
"code": "daily_quota_exceeded"
}{
"detail": "Spam checker temporarily unavailable. Please try again.",
"code": "engine_unavailable"
}Analyse the plain text of a cold email for the content signals SpamAssassin flags. SpamAssassin is the engine many SMB mailboxes, hosting providers, IT shops, and education and government domains run on inbound mail. The response gives the overall
score, the spam threshold (default 5.0), a verdict (clean, borderline, or likely_flagged), and the rules that fired with their points and plain-English descriptions.
SpamAssassin reacts to phrasing, not strategy. To lower a score, reword the phrases behind the highest-points rules and re-check. You keep the offer, you change the wording. It’s one tool in your deliverability belt: a clean result isn’t a guarantee of inbox placement, but it’s a fast way to reverse-engineer what content filters react to before you send.
Pricing and limits
Free. No credits are deducted. Usage is bounded by 100 checks per day per account, shared with the in-dashboard spam checker (both draw down the same pool), plus the standard 20 requests per second per account. Both limits return429; the code field (daily_quota_exceeded vs rate_limited) and the Retry-After header tell them apart. See errors for the full reference.Authorizations
API key for authentication
Body
application/json
Email copy to analyse for spam-filter triggers.
Response
Successful Response
SpamAssassin analysis of the submitted email copy.
Total SpamAssassin score for the copy. Higher means more spam-like.
Example:
2.6
Score at or above which mail is treated as spam (SpamAssassin default is 5.0).
Example:
5
Overall assessment: clean (well below threshold), borderline (approaching threshold), or likely_flagged (at or above threshold).
Example:
"borderline"
Content rules that fired, highest-scoring first. Empty when nothing triggered.
Show child attributes
Show child attributes
⌘I
Check Email Copy for Spam Triggers
curl --request POST \
--url https://api.orbisearch.com/v1/content-spam-check \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"content": "ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!",
"subject": "URGENT: claim your spot before midnight"
}
'import requests
url = "https://api.orbisearch.com/v1/content-spam-check"
payload = {
"content": "ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!",
"subject": "URGENT: claim your spot before midnight"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
content: 'ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!',
subject: 'URGENT: claim your spot before midnight'
})
};
fetch('https://api.orbisearch.com/v1/content-spam-check', 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.orbisearch.com/v1/content-spam-check",
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([
'content' => 'ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!',
'subject' => 'URGENT: claim your spot before midnight'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.orbisearch.com/v1/content-spam-check"
payload := strings.NewReader("{\n \"content\": \"ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!\",\n \"subject\": \"URGENT: claim your spot before midnight\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.orbisearch.com/v1/content-spam-check")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!\",\n \"subject\": \"URGENT: claim your spot before midnight\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbisearch.com/v1/content-spam-check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"ACT NOW!! This EXCLUSIVE offer expires TONIGHT. Guaranteed to DOUBLE your revenue and make you $50,000 fast. Click here to claim your FREE spot!!!\",\n \"subject\": \"URGENT: claim your spot before midnight\"\n}"
response = http.request(request)
puts response.read_body{
"score": 2.6,
"threshold": 5,
"verdict": "borderline",
"rules": [
{
"name": "MONEY_NOHTML",
"points": 2.5,
"description": "Plain-text message focused on large sums of money"
},
{
"name": "ACT_NOW_CAPS",
"points": 0.1,
"description": "Talks about 'acting now' with capitals"
}
]
}{
"detail": "API key required in X-API-Key header"
}{
"detail": "Invalid request body field 'content': String should have at least 1 character.",
"errors": [
{
"loc": "body.content",
"msg": "Invalid request body field 'content': String should have at least 1 character.",
"type": "string_too_short"
}
]
}{
"detail": "You've reached today's limit of 100 checks. Try again tomorrow.",
"code": "daily_quota_exceeded"
}{
"detail": "Spam checker temporarily unavailable. Please try again.",
"code": "engine_unavailable"
}