Submit text, get a request_id, poll the result with long-polling. You get a
0 to 100 document score, a verdict label, a probability and the highest-scoring sentences.
One API key is $100 and includes 3,000,000 credits, where one credit covers one word.
POST /api/v1/enterprise/detect then GET .../{request_id}?wait=true.X-API-Key header. No OAuth, no token exchange.Base URL: https://detector-api-server-tsxmk.ondigitalocean.app
Submit text for analysis. Returns immediately with a job handle and the credit usage for the
submission. Body is { "text": "string" }, between 50 and 10,000 characters.
Fetch the result. Append ?wait=true and the server holds the connection open
until the job completes, up to roughly 30 seconds, which removes the need for a polling loop
in most integrations.
# 1. Submit text for analysis
curl -X POST "https://detector-api-server-tsxmk.ondigitalocean.app/api/v1/enterprise/detect" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{"text": "Paste between 50 and 10,000 characters of the text you want analysed."}'
# → { "request_id": "ent_a3f9b2c1d4e5", "status": "queued", "usage": { ... } }
# 2. Fetch the result. ?wait=true long-polls until the job completes.
curl "https://detector-api-server-tsxmk.ondigitalocean.app/api/v1/enterprise/detect/ent_a3f9b2c1d4e5?wait=true" \
-H "X-API-Key: YOUR_API_KEY"
{
"status": "completed",
"job_id": "ent_a3f9b2c1d4e5",
"document_score": 82,
"document_prediction": "AI",
"document_probability": 0.82,
"total_sentences": 14,
"processing_time": 340,
"sample_sentences": [
{ "sentence": "Furthermore, the results demonstrate...", "score": 91 },
{ "sentence": "This analysis shows...", "score": 78 }
]
}
| Field | Type | Meaning |
|---|---|---|
document_score | number 0 to 100 | Raw AI likelihood score for the document. |
document_prediction | "AI" | "Human" | "AI + Human" | Verdict label derived from the score bands below. |
document_probability | number 0 to 1 | Model confidence in the verdict. |
total_sentences | integer | How many sentences were analysed. |
processing_time | integer, milliseconds | Worker processing time for the job. |
sample_sentences | array | Top-scoring sentences with their individual scores. |
Score bands: 0 to 50 reads as Human, 51 to 60 as Mixed, 61 to 100 as AI. Apply your own threshold if your workflow needs a different sensitivity, but record which one you used so results stay comparable over time.
| Status | Meaning | What to do |
|---|---|---|
401 | Invalid or missing API key | Check the X-API-Key header. A regenerated key invalidates the previous secret at once. |
402 | Insufficient credits | Top up from the API Keys tab in the dashboard. |
422 | Text too short or missing | The body needs at least 50 characters of text. |
404 | Job not found or expired | Re-submit. Do not assume a job handle is durable indefinitely. |
429 | Rate limit exceeded | Back off and retry after a few seconds. |
5xx | Server error | Retry with exponential back-off. |
We do not publish a numeric rate limit or an uptime commitment, so do not build against an assumed one. If your integration needs either in writing, ask at support@gptone.me before you commit to a design.
The endpoint accepts 50 to 10,000 characters. The web app accepts 50,000. If you sized your chunker off the marketing number your first long document will fail. Split on paragraph boundaries and aggregate.
Most common mistakesample_sentences is what makes a result reviewable by a human later. A stored verdict with no sentence data is not auditable, and moderation decisions eventually get audited.
If you deviate from the 61-and-above default, write the threshold into the record. Otherwise a policy change silently makes last quarter's data incomparable with this quarter's.
Data hygieneOur own benchmark puts the false positive rate at 3.6%, and 8.0% on non-native English writing. Route a flag to a person. Automatic rejection at scale means automatically rejecting real writers at a measurable rate.
Design constraintKeep your key server-side. It is a bearer credential in a header, so anything that can read it can spend your credits. If one leaks, regenerate it from the dashboard: the old secret stops working immediately and your balance carries over.
X-API-Key header on every request. There is no OAuth flow and no bearer token. Keys are created, revealed once, revoked and regenerated from the Enterprise tab of the dashboard. A regenerated key invalidates the old secret immediately and leaves the credit balance untouched.POST /api/v1/enterprise/detect returns a request_id straight away, and GET /api/v1/enterprise/detect/{request_id} returns the result. Add ?wait=true to the GET and the server long-polls, holding the connection open until the job finishes, so you do not need a tight retry loop.Three pieces on choosing and placing a detection API inside an existing product.
One key is $100 with 3,000,000 credits included, one credit per word analysed. Keys are issued and regenerated from the Enterprise tab in the dashboard.
See API pricingIntegration questions: support@gptone.me