REST API
Check, rewrite and audit from your own code. Authentication, the main endpoints and their fields, and errors.
Everything on the website is available as a JSON API at https://dropslop.ai/v1/. This page covers the parts most people need. The full list of endpoints and fields is in the API reference, and the Developers page has more examples.
Authentication
Make a key on the API keys page (you need a free account). Keys start with hk_live_. DropSlop shows a key once, when you make it; store it somewhere safe.
Send the key in either header:
Authorization: Bearer hk_live_YOUR_KEY
# or
X-API-Key: hk_live_YOUR_KEYEach key has its own limit of requests a minute, shown under its name on the keys page. Checked words, rewritten words and certificates come out of your plan's allowance; see Words, certificates and plans.
Check a text: X-Ray
POST /v1/xray returns the whole-draft scores, a score and tone for each paragraph, and the tells it found.
curl -X POST https://dropslop.ai/v1/xray \
-H "Authorization: Bearer $DROPSLOP_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Paste the draft here."}'| Field | ||
|---|---|---|
text | required | The draft, as plain text or Markdown. |
heat_threshold | default 0.15 | Paragraphs scoring at or above this are flagged. |
voice_profile | optional | A saved voice's profile, so the marks fit that style (see Voices). |
doc_id | optional | A Library draft to attach the check to. |
The response includes scores (the whole draft), summary, blocks (one per paragraph, each with a tier of CLEAN, WARM or HOT) and tell_phrases.
Score only: detect
POST /v1/detect returns just the scores, for one text or many.
| Field | ||
|---|---|---|
text | one of these | One text to score. |
texts | one of these | A list of texts, scored together. |
mode | default local_v2 | local_v2 or fast. Both run on DropSlop's servers. |
The response includes combined (0 to 1), verdict, band and word_count. Scores are estimates; read How to read a score.
The hybrid and verified modes also send the text to outside detectors (hybrid only when DropSlop's own score is high), and each text sent uses certificates: one for each 1,000 words or part of them. Without enough certificates left, hybrid keeps the local score for that text and says why in live_upstream_skipped. Use them only when you mean to; see Privacy and data.
Rewrite: Humanize
A rewrite takes up to a few minutes, so it runs as a job: start it, then ask for the result.
JOB=$(curl -s https://dropslop.ai/v1/humanize/jobs \
-H "Authorization: Bearer $DROPSLOP_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Paste the draft here.", "pinned_terms": ["Northwind"]}' | jq -r .job_id)
while [ "$(curl -s https://dropslop.ai/v1/humanize/jobs/$JOB | jq -r .status)" = "running" ]; do sleep 3; done
curl -s https://dropslop.ai/v1/humanize/jobs/$JOBPOST /v1/humanize/jobs:
| Field | ||
|---|---|---|
text | required | The draft. |
pinned_terms | optional | Words that must stay exactly as written. |
heat_threshold | default 0.15 | Only paragraphs scoring at or above this are rewritten. |
doc_id, version_label | optional | Save the rewrite as a new version of a Library draft. |
It answers with job_id (it starts hj_), status: "running" and poll_url.
GET /v1/humanize/jobs/{job_id} returns status: running, then completed with the result, or failed with an error. A completed job includes text (the rewrite), before_scores, after_scores, summary (how many paragraphs were rewritten) and fact_guard, whose status is PASS, WARN (a fact was dropped) or FAIL (a fact was added). See Fact-Guard.
Site audit
POST /v1/site-audit starts an audit and returns at once with a job_id.
curl -X POST https://dropslop.ai/v1/site-audit \
-H "Authorization: Bearer $DROPSLOP_KEY" \
-H "Content-Type: application/json" \
-d '{"input_mode": "domain", "target": "https://example.com", "max_pages": 50}'| Field | ||
|---|---|---|
input_mode | default domain | domain, sitemap or urls. |
target | for domain and sitemap | The site or sitemap address. url is accepted as another name for it. |
urls | for urls | The pages to read: a list, or one address per line. |
max_pages | default 100 | Lowered to your plan's limit if it is higher; the response's max_pages_capped says so. |
include_prefixes, exclude_prefixes | optional | Only read, or skip, addresses starting with these paths. |
min_words | default 80 | Pages with fewer words are skipped. |
The response includes job_id, status, phase and progress_pct.
GET /v1/site-audit/{job_id}returns progress while it runs, then the report:domain_summary,pages,top_10_worst_pagesandtop_ai_tells.GET /v1/site-audit/{job_id}/export.csvdownloads the report as CSV.
Audit reports are public to anyone with the job's link; see Site audit.
Certificates
POST /v1/certify issues a certificate and uses one certificate for each 1,000 words or part of them (a 2,400-word text uses 3).
| Field | ||
|---|---|---|
text | required | The final text to certify. |
source_text | optional | The original draft, so Fact-Guard can compare them. |
title | optional | Shown on the certificate page. |
pinned_terms | optional | Words Fact-Guard must find unchanged. |
is_public | default true | Whether the certificate page is public. |
This sends the text to GPTZero and Pangram. The response includes the certificate's id and its page at /v/{id}.
Your usage
GET /v1/usage?days=30 returns your checked words, rewritten words and certificates used against your allowance, day by day.
Errors
| Code | Meaning |
|---|---|
401 | The key is missing or not valid. |
402 | An allowance has run out. detail.message names it and the day it resets; detail.allowance is check_words, rewrite_words or certificates. |
422 | A field is missing or out of range. The body names it. |
429 | Too many requests a minute for this key. Wait a moment and try again. |