AI Detector
curl --request POST \
--url https://www.stealthgpt.ai/api/stealthify/detect \
--header 'Content-Type: application/json' \
--header 'api-token: <api-token>' \
--data '
{
"text": "<string>"
}
'import requests
url = "https://www.stealthgpt.ai/api/stealthify/detect"
payload = { "text": "<string>" }
headers = {
"api-token": "<api-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'api-token': '<api-token>', 'Content-Type': 'application/json'},
body: JSON.stringify({text: '<string>'})
};
fetch('https://www.stealthgpt.ai/api/stealthify/detect', 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://www.stealthgpt.ai/api/stealthify/detect",
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([
'text' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"api-token: <api-token>"
],
]);
$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://www.stealthgpt.ai/api/stealthify/detect"
payload := strings.NewReader("{\n \"text\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api-token", "<api-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://www.stealthgpt.ai/api/stealthify/detect")
.header("api-token", "<api-token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.stealthgpt.ai/api/stealthify/detect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api-token"] = '<api-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"howLikelyToBeDetected": 123,
"wordsSpent": 123,
"remainingCredits": 123,
"billingMode": "<string>",
"meteredChargedCredits": 123
}Endpoints
AI Detector
Score text for AI-generated content with the /api/stealthify/detect endpoint
POST
/
api
/
stealthify
/
detect
AI Detector
curl --request POST \
--url https://www.stealthgpt.ai/api/stealthify/detect \
--header 'Content-Type: application/json' \
--header 'api-token: <api-token>' \
--data '
{
"text": "<string>"
}
'import requests
url = "https://www.stealthgpt.ai/api/stealthify/detect"
payload = { "text": "<string>" }
headers = {
"api-token": "<api-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'api-token': '<api-token>', 'Content-Type': 'application/json'},
body: JSON.stringify({text: '<string>'})
};
fetch('https://www.stealthgpt.ai/api/stealthify/detect', 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://www.stealthgpt.ai/api/stealthify/detect",
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([
'text' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"api-token: <api-token>"
],
]);
$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://www.stealthgpt.ai/api/stealthify/detect"
payload := strings.NewReader("{\n \"text\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api-token", "<api-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://www.stealthgpt.ai/api/stealthify/detect")
.header("api-token", "<api-token>")
.header("Content-Type", "application/json")
.body("{\n \"text\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.stealthgpt.ai/api/stealthify/detect")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api-token"] = '<api-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"text\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"howLikelyToBeDetected": 123,
"wordsSpent": 123,
"remainingCredits": 123,
"billingMode": "<string>",
"meteredChargedCredits": 123
}The
Use
/api/stealthify/detect endpoint runs the same AI-detection backend that powers the StealthGPT AI Detector on the website. Submit a piece of text and receive a 0-100 score indicating how likely it is to be flagged as AI-generated by detection tools.
Request Parameters
string
required
Your unique API authentication token. You can find this in your StealthGPT dashboard under the API Key tab.
string
required
The text to analyze. Maximum 3,000 words per request.
Response
number
A score from 0 to 100 indicating how likely the text is to be flagged as AI-generated by detection tools. Higher means more likely to be flagged.
number
Number of words charged for this request (equal to the input word count).
number
Number of prepaid words remaining in your account after this request.
string
Whether the request was billed from prepaid words (
prepaid) or pay-as-you-go metered billing (payg).number
If billed via pay-as-you-go, the number of words added to metered usage for this request (0 when billed from prepaid).
Example Request
curl --location 'https://www.stealthgpt.ai/api/stealthify/detect' \
--header 'api-token: YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"text": "Renewable energy sources, including solar and wind power, represent inexhaustible resources unlike finite fossil fuels."
}'
import requests
response = requests.post(
'https://www.stealthgpt.ai/api/stealthify/detect',
headers={
'api-token': 'YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
json={
'text': 'Renewable energy sources, including solar and wind power, represent inexhaustible resources unlike finite fossil fuels.'
}
)
print(response.json())
const axios = require('axios');
axios.post('https://www.stealthgpt.ai/api/stealthify/detect', {
text: 'Renewable energy sources, including solar and wind power, represent inexhaustible resources unlike finite fossil fuels.'
}, {
headers: {
'api-token': 'YOUR_API_TOKEN',
'Content-Type': 'application/json'
}
}).then(response => {
console.log(response.data);
});
Example Response
{
"howLikelyToBeDetected": 87,
"wordsSpent": 16,
"remainingCredits": 984984,
"billingMode": "prepaid",
"meteredChargedCredits": 0
}
Score Interpretation
ThehowLikelyToBeDetected score is a probability expressed on a 0-100 scale.
| Score range | Interpretation |
|---|---|
| 0 - 30 | Likely human-written. Low risk of being flagged as AI. |
| 31 - 70 | Mixed signals. May be partially AI-generated or heavily edited. |
| 71 - 100 | Likely AI-generated. High risk of being flagged by detectors. |
Detection scores are probabilistic. Short inputs (under ~50 words) and highly templated text (e.g. resumes, legal boilerplate) can produce noisy results regardless of how the text was written.
Pairing With Humanizer
A common workflow is to humanize text with/api/stealthify and then verify the result with /api/stealthify/detect:
const stealthified = await fetch('https://www.stealthgpt.ai/api/stealthify', {
method: 'POST',
headers: {
'api-token': 'YOUR_API_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ prompt: sourceText, rephrase: true }),
}).then(r => r.json())
const detection = await fetch('https://www.stealthgpt.ai/api/stealthify/detect', {
method: 'POST',
headers: {
'api-token': 'YOUR_API_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ text: stealthified.result }),
}).then(r => r.json())
console.log('humanizer score:', stealthified.howLikelyToBeDetected)
console.log('independent detector score:', detection.howLikelyToBeDetected)
The two
howLikelyToBeDetected fields are inverse orientations. On
/api/stealthify (and the humanizer runs) it is a human-likeness score
where higher is better (more human). On /api/stealthify/detect it is an
AI-likelihood score where higher means more likely AI. A good
humanizer result is therefore high on /api/stealthify and low on
/api/stealthify/detect./api/stealthify/detect when you need to score arbitrary text that did not pass through the humanizer.
Usage Notes
- Billing is
input wordsper request (1 charged word per input word). See Pricing for rates. - Inputs over 3,000 words return
400 Bad Request. Split long documents into multiple calls and average the scores client-side if needed. - The detector is language-agnostic; non-English input is supported.