Help

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_KEY

Each 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
textrequiredThe draft, as plain text or Markdown.
heat_thresholddefault 0.15Paragraphs scoring at or above this are flagged.
voice_profileoptionalA saved voice's profile, so the marks fit that style (see Voices).
doc_idoptionalA 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
textone of theseOne text to score.
textsone of theseA list of texts, scored together.
modedefault local_v2local_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/$JOB

POST /v1/humanize/jobs:

Field
textrequiredThe draft.
pinned_termsoptionalWords that must stay exactly as written.
heat_thresholddefault 0.15Only paragraphs scoring at or above this are rewritten.
doc_id, version_labeloptionalSave 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_modedefault domaindomain, sitemap or urls.
targetfor domain and sitemapThe site or sitemap address. url is accepted as another name for it.
urlsfor urlsThe pages to read: a list, or one address per line.
max_pagesdefault 100Lowered to your plan's limit if it is higher; the response's max_pages_capped says so.
include_prefixes, exclude_prefixesoptionalOnly read, or skip, addresses starting with these paths.
min_wordsdefault 80Pages 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_pages and top_ai_tells.
  • GET /v1/site-audit/{job_id}/export.csv downloads 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
textrequiredThe final text to certify.
source_textoptionalThe original draft, so Fact-Guard can compare them.
titleoptionalShown on the certificate page.
pinned_termsoptionalWords Fact-Guard must find unchanged.
is_publicdefault trueWhether 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

CodeMeaning
401The key is missing or not valid.
402An allowance has run out. detail.message names it and the day it resets; detail.allowance is check_words, rewrite_words or certificates.
422A field is missing or out of range. The body names it.
429Too many requests a minute for this key. Wait a moment and try again.

On this page