Build on the DropSlop API.

The X-Ray, the detector, Humanize and Site audit as JSON over HTTPS, plus an MCP server for Claude and Cursor.

  • Base URLhttps://dropslop.ai
  • Your keyAuthorization: Bearer hk_live_…
  • MCP serverhttps://dropslop.ai/mcp

Every endpoint and field: the API reference. Guides in plain words: Help.

Try it POST /v1/xray

One live call per press, without a key. Your text is not saved.

Response

Quickstart.

Send JSON, get JSON. Every request carries your key in a header.

  1. Get a key. Keys start with hk_live_ and come with an account. Create a free account, then make one on the API keys page.
  2. Send it in a header. Use Authorization: Bearer or X-API-Key. Either works.
  3. Call an endpoint. Start with the X-Ray: one call, the whole result.

No key? The X-Ray, the detector, Humanize and the site audit still answer, within the free daily allowance. Saving drafts and voices needs a key.

Shell · set your key once
export DROPSLOP_KEY="hk_live_YOUR_KEY"

# Either header works
curl https://dropslop.ai/v1/usage -H "Authorization: Bearer $DROPSLOP_KEY"
curl https://dropslop.ai/v1/usage -H "X-API-Key: $DROPSLOP_KEY"

POST/v1/xray

X-Ray a draft.

Scores for each paragraph, the phrases that give it away with their replacements, and runs of sentences that are all about one length.

Request

textstring, required
Markdown or plain text. Paragraphs split on blank lines.
heat_threshold0 to 1, default 0.15
A paragraph under this score, with no marked phrase, counts as CLEAN.
voice_profileobject, optional
A saved voice from /v1/voices. Marks and guidance follow it.
voice_namestring, optional
The voice’s name, used in the guidance.
doc_idstring, optional
A saved document this check belongs to.

What comes back

scores.band
CLEAN, WARM or HOT: reads like a person, partly machine-made, machine-made.
scores.combined
The detector’s output, 0 to 1. Each paragraph has its own in blocks.
tell_phrases
Each marked phrase, with start_char, end_char and replacements.
rhythm_runs
Paragraphs whose sentences run to about one length, with guidance.
usage
The account’s running totals after this call.
Request
curl https://dropslop.ai/v1/xray \
  -H "Authorization: Bearer $DROPSLOP_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{
  "text": "In today's fast-paced digital landscape, incident response has become more critical than ever. Engineering teams are under constant pressure to keep services available while shipping new features at a relentless pace. It is worth noting that downtime now costs mid-sized companies an average of $2.4M per year.\n\nIt's not just about having the right tools — it's about building a culture of ownership. By leveraging PagerDuty alongside clear escalation policies, teams can seamlessly coordinate their response and foster a sense of shared accountability. This approach serves as a testament to the power of proactive planning."
}
JSON
Response · saved 6 November
{
  "scores": {
    "local_gz": 0.6573,
    "local_pg": 0.8401,
    "local_combined": 0.7578,
    "combined": 0.7578,
    "verdict": "ai",
    "band": "HOT"
  },
  "summary": {
    "total_words": 95,
    "total_blocks": 2,
    "clean_blocks": 0,
    "warm_blocks": 0,
    "hot_blocks": 2,
    "locked_structural_blocks": 0,
    "tell_phrase_count": 5,
    "rhythm_run_count": 2,
    "surprisal_clump_count": 0
  },
  "blocks": [
    {
      "block_id": "b0",
      "index": 0,
      "kind": "prose",
      "start_char": 0,
      "end_char": 310,
      "word_count": 47,
      "text": "In today's fast-paced digital landscape, incident response has become more critical than ever. Engineering teams are under constant pressure to keep services available while shipping new features at a relentless pace. It is worth noting that downtime now costs mid-sized companies an average of $2.4M per year.",
      "local_gz": 0.8033,
      "local_pg": 0.8518,
      "local_combined": 0.83,
      "tier": "HOT",
      "locked_default": false,
      "tell_count": 1,
      "rhythm_run_count": 1,
      "surprisal_clump_count": 0
    },
    {
      "block_id": "b1",
      "index": 1,
      "kind": "prose",
      "start_char": 312,
      "end_char": 625,
      "word_count": 48,
      "text": "It's not just about having the right tools — it's about building a culture of ownership. By leveraging PagerDuty alongside clear escalation policies, teams can seamlessly coordinate their response and foster a sense of shared accountability. This approach serves as a testament to the power of proactive planning.",
      "local_gz": 0.5651,
      "local_pg": 0.6791,
      "local_combined": 0.6278,
      "tier": "HOT",
      "locked_default": false,
      "tell_count": 4,
      "rhythm_run_count": 1,
      "surprisal_clump_count": 0
    }
  ],
  "tell_phrases": [
    {
      "start_char": 0,
      "end_char": 29,
      "matched_text": "In today's fast-paced digital",
      "category": "lexical_cliche",
      "label": "AI throat-clearer ('in today's fast-paced...')",
      "action": "replace_or_drop",
      "replacements": [
        "today",
        "right now",
        "in modern practice",
        ""
      ]
    },
    {
      "start_char": 312,
      "end_char": 325,
      "matched_text": "It's not just",
      "category": "lexical_cliche",
      "label": "Contrastive AI cliché ('it's not just')",
      "action": "rephrase",
      "replacements": [
        "more than",
        "beyond",
        "not only"
      ]
    },
    {
      "start_char": 354,
      "end_char": 357,
      "matched_text": " — ",
      "category": "typography_tell",
      "label": "Em-dash / double-hyphen punctuation tell",
      "action": "replace",
      "replacements": [
        ", ",
        "; ",
        " (",
        ". "
      ]
    },
    {
      "start_char": 404,
      "end_char": 414,
      "matched_text": "leveraging",
      "category": "lexical_cliche",
      "label": "Corporate AI verb ('leverage')",
      "action": "replace",
      "replacements": [
        "use",
        "rely on",
        "put to work",
        "tap"
      ]
    },
    {
      "start_char": 578,
      "end_char": 592,
      "matched_text": "a testament to",
      "category": "lexical_cliche",
      "label": "AI cliché ('testament to')",
      "action": "replace",
      "replacements": [
        "proof of",
        "evidence of",
        "a clear sign of"
      ]
    }
  ],
  "rhythm_runs": [
    {
      "block_id": "b0",
      "start_char": 0,
      "end_char": 310,
      "text": "In today's fast-paced digital landscape, incident response has become more critical than ever. Engineering teams are under constant pressure to keep services available while shipping new features at a relentless pace. It is worth noting that downtime now costs mid-sized companies an average of $2.4M per year.",
      "sentence_word_counts": [
        13,
        18,
        16
      ],
      "sl_cv": 0.1312,
      "reason": "low_paragraph_burstiness_cv",
      "guidance": "Low paragraph sentence-length variation (CV=0.13 < 0.22, lengths=[13, 18, 16]). Mix a short declarative sentence (<= 7 words) with a longer analytical sentence (>= 24 words)."
    },
    {
      "block_id": "b1",
      "start_char": 312,
      "end_char": 625,
      "text": "It's not just about having the right tools — it's about building a culture of ownership. By leveraging PagerDuty alongside clear escalation policies, teams can seamlessly coordinate their response and foster a sense of shared accountability. This approach serves as a testament to the power of proactive planning.",
      "sentence_word_counts": [
        16,
        20,
        12
      ],
      "sl_cv": 0.2041,
      "reason": "low_paragraph_burstiness_cv",
      "guidance": "Low paragraph sentence-length variation (CV=0.20 < 0.22, lengths=[16, 20, 12]). Mix a short declarative sentence (<= 7 words) with a longer analytical sentence (>= 24 words)."
    }
  ],
  "surprisal_clumps": [],
  "annotations": {
    "tell_phrases": [
      {
        "start_char": 0,
        "end_char": 29,
        "matched_text": "In today's fast-paced digital",
        "category": "lexical_cliche",
        "label": "AI throat-clearer ('in today's fast-paced...')",
        "action": "replace_or_drop",
        "replacements": [
          "today",
          "right now",
          "in modern practice",
          ""
        ]
      },
      {
        "start_char": 312,
        "end_char": 325,
        "matched_text": "It's not just",
        "category": "lexical_cliche",
        "label": "Contrastive AI cliché ('it's not just')",
        "action": "rephrase",
        "replacements": [
          "more than",
          "beyond",
          "not only"
        ]
      },
      {
        "start_char": 354,
        "end_char": 357,
        "matched_text": " — ",
        "category": "typography_tell",
        "label": "Em-dash / double-hyphen punctuation tell",
        "action": "replace",
        "replacements": [
          ", ",
          "; ",
          " (",
          ". "
        ]
      },
      {
        "start_char": 404,
        "end_char": 414,
        "matched_text": "leveraging",
        "category": "lexical_cliche",
        "label": "Corporate AI verb ('leverage')",
        "action": "replace",
        "replacements": [
          "use",
          "rely on",
          "put to work",
          "tap"
        ]
      },
      {
        "start_char": 578,
        "end_char": 592,
        "matched_text": "a testament to",
        "category": "lexical_cliche",
        "label": "AI cliché ('testament to')",
        "action": "replace",
        "replacements": [
          "proof of",
          "evidence of",
          "a clear sign of"
        ]
      }
    ],
    "rhythm_runs": [
      {
        "block_id": "b0",
        "start_char": 0,
        "end_char": 310,
        "text": "In today's fast-paced digital landscape, incident response has become more critical than ever. Engineering teams are under constant pressure to keep services available while shipping new features at a relentless pace. It is worth noting that downtime now costs mid-sized companies an average of $2.4M per year.",
        "sentence_word_counts": [
          13,
          18,
          16
        ],
        "sl_cv": 0.1312,
        "reason": "low_paragraph_burstiness_cv",
        "guidance": "Low paragraph sentence-length variation (CV=0.13 < 0.22, lengths=[13, 18, 16]). Mix a short declarative sentence (<= 7 words) with a longer analytical sentence (>= 24 words)."
      },
      {
        "block_id": "b1",
        "start_char": 312,
        "end_char": 625,
        "text": "It's not just about having the right tools — it's about building a culture of ownership. By leveraging PagerDuty alongside clear escalation policies, teams can seamlessly coordinate their response and foster a sense of shared accountability. This approach serves as a testament to the power of proactive planning.",
        "sentence_word_counts": [
          16,
          20,
          12
        ],
        "sl_cv": 0.2041,
        "reason": "low_paragraph_burstiness_cv",
        "guidance": "Low paragraph sentence-length variation (CV=0.20 < 0.22, lengths=[16, 20, 12]). Mix a short declarative sentence (<= 7 words) with a longer analytical sentence (>= 24 words)."
      }
    ],
    "surprisal_clumps": []
  },
  "elapsed_ms": 12005.8,
  "usage": {
    "used_local_words": 381859,
    "quota_local_words": 10000000,
    "used_verified_audits": 2,
    "quota_verified_audits": 5000
  }
}

POST/v1/detect

Score text, one or many.

Just the scores, without the marks. Send a batch and the results come back in the same order.

Request

textstring
One text. The scores come back at the top level.
textsarray of strings
A batch. The scores come back in results, in order.
modedefault "local_v2"
local_v2 or fast stay on DropSlop’s servers.

Each result has combined (0 to 1), band, verdict and word_count.

Request · six paragraphs in one call
curl https://dropslop.ai/v1/detect \
  -H "Authorization: Bearer $DROPSLOP_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON'
{
  "texts": [
    "In today's fast-paced digital landscape, incident response has become more critical than ever. Engineering teams are under constant pressure to keep services available while shipping new features at a relentless pace. It is worth noting that downtime now costs mid-sized companies an average of $2.4M per year.",
    "When our payments API went down on February 14, the outage lasted 47 minutes. We had alerts. We had a runbook. Nobody had looked at either since March, and the on-call engineer spent the first eleven minutes finding the right dashboard.",
    "It's not just about having the right tools — it's about building a culture of ownership. By leveraging PagerDuty alongside clear escalation policies, teams can seamlessly coordinate their response and foster a sense of shared accountability. This approach serves as a testament to the power of proactive planning.",
    "The fix was boring. We cut the runbook from nine pages to one, put the dashboard link in the alert itself, and made every new hire shadow a real page before taking the pager alone. Mean time to acknowledge fell from 6 minutes to 90 seconds by the end of Q3.",
    "Moreover, organizations that invest in incident readiness see measurable improvements across the board. Response times decrease significantly as teams develop muscle memory. Customer trust increases steadily as reliability becomes a visible priority. Engineering morale improves noticeably as firefighting gives way to planned work.",
    "Ultimately, incident response is a rich tapestry of people, process, and technology. As we delve deeper into 2025, the teams that thrive will be those that embrace continuous improvement — and our 41% reduction in repeat incidents shows what that commitment can look like."
  ]
}
JSON
Response · saved 6 November
{
  "mode": "local_v2",
  "count": 6,
  "results": [
    {
      "local_gz": 0.8033,
      "local_pg": 0.8518,
      "local_combined": 0.83,
      "combined": 0.83,
      "verdict": "ai",
      "band": "HOT",
      "word_count": 47
    },
    {
      "local_gz": 0.0632,
      "local_pg": 0.104,
      "local_combined": 0.0856,
      "combined": 0.0856,
      "verdict": "human",
      "band": "CLEAN",
      "word_count": 41
    },
    {
      "local_gz": 0.5651,
      "local_pg": 0.6791,
      "local_combined": 0.6278,
      "combined": 0.6278,
      "verdict": "mixed",
      "band": "HOT",
      "word_count": 48
    },
    {
      "local_gz": 0.1037,
      "local_pg": 0.1347,
      "local_combined": 0.1208,
      "combined": 0.1208,
      "verdict": "human",
      "band": "CLEAN",
      "word_count": 51
    },
    {
      "local_gz": 0.7606,
      "local_pg": 0.8172,
      "local_combined": 0.7917,
      "combined": 0.7917,
      "verdict": "ai",
      "band": "HOT",
      "word_count": 43
    },
    {
      "local_gz": 0.7743,
      "local_pg": 0.7828,
      "local_combined": 0.779,
      "combined": 0.779,
      "verdict": "ai",
      "band": "HOT",
      "word_count": 44
    }
  ],
  "usage": {
    "used_local_words": 382464,
    "quota_local_words": 10000000,
    "used_verified_audits": 2,
    "quota_verified_audits": 5000
  }
}

POST/v1/humanize/jobs

Rewrite with Fact-Guard.

Rewrites only the paragraphs that read machine-made. A rewrite takes a while, so you start a job and poll it.

Request

textstring, required
The draft, in Markdown or plain text.
pinned_termsarray of strings
Names and figures that must come through unchanged.
heat_threshold0 to 1, default 0.15
Only paragraphs scoring above it are rewritten.
locked_block_idsarray of strings
Paragraphs to leave alone, by id: b0, b1…
loradefault "blend"
The rewriting model: blend, v2_dpo, v2_sft or r16.
voice_profileobject, optional
Rewrite toward a saved voice. voice_name names it.
doc_idstring, optional
Saves the rewrite as a new version of that document. version_label names it.

Polling

GET /v1/humanize/jobs/{job_id}
status is running, then completed with the whole result, or failed with an error.

Poll every 2 to 5 seconds. A short draft finishes in under a minute.

Request · start, poll, read
# 1. Start the job. It answers at once with a job_id.
JOB=$(curl -s https://dropslop.ai/v1/humanize/jobs \
  -H "Authorization: Bearer $DROPSLOP_KEY" \
  -H "Content-Type: application/json" \
  -d @- <<'JSON' | jq -r .job_id
{
  "text": "In today's fast-paced world, customer onboarding has become more important than ever. Our team at Brightwell rolled out a new welcome flow on March 3, 2026, and it is worth noting that activation rose from 31% to 44% within six weeks. The project cost $18,000 and took three engineers. Ultimately, it serves as a testament to the power of listening to users, and it underscores the pivotal role that small, thoughtful changes play in driving growth."
}
JSON
)

# 2. Poll until it is no longer running.
while [ "$(curl -s https://dropslop.ai/v1/humanize/jobs/$JOB | jq -r .status)" = "running" ]; do
  sleep 3
done

# 3. Read the finished job.
curl -s https://dropslop.ai/v1/humanize/jobs/$JOB
Start response · its fields in the server code
{
  "ok": true,
  "job_id": "hj_…",
  "status": "running",
  "poll_url": "/v1/humanize/jobs/hj_…"
}
Finished job · saved 6 November
{
  "job_id": "hj_e702cf72a0e7",
  "status": "completed",
  "text": "But what we learned? Listening to our users and making a few tweaks goes a long way. Our team at Brightwell rolled out a new welcome flow on March 3, 2026, and activation rose from 31% to 44% within six weeks. The project cost $18,000 and took three engineers.",
  "lora": "blend",
  "heat_threshold": 0.15,
  "before_scores": {
    "local_gz": 0.6567,
    "local_pg": 0.7914,
    "local_combined": 0.7308,
    "combined": 0.7308,
    "verdict": "ai",
    "band": "HOT"
  },
  "after_scores": {
    "local_gz": 0.1398,
    "local_pg": 0.2683,
    "local_combined": 0.2105,
    "combined": 0.2105,
    "verdict": "human",
    "band": "WARM",
    "para_hashes": {
      "175zhq978": 0.2105
    },
    "para_scores": [
      0.2105
    ]
  },
  "summary": {
    "blocks_total": 1,
    "blocks_rewritten": 1,
    "blocks_locked": 0,
    "before_combined": 0.7308,
    "after_combined": 0.2105
  },
  "blocks": [
    {
      "block_id": "b0",
      "kind": "prose",
      "tier_before": "HOT",
      "action": "SURGICAL_REWRITE",
      "before_text": "In today's fast-paced world, customer onboarding has become more important than ever. Our team at Brightwell rolled out a new welcome flow on March 3, 2026, and it is worth noting that activation rose from 31% to 44% within six weeks. The project cost $18,000 and took three engineers. Ultimately, it serves as a testament to the power of listening to users, and it underscores the pivotal role that small, thoughtful changes play in driving growth.",
      "after_text": "But what we learned? Listening to our users and making a few tweaks goes a long way. Our team at Brightwell rolled out a new welcome flow on March 3, 2026, and activation rose from 31% to 44% within six weeks. The project cost $18,000 and took three engineers.",
      "before_combined": 0.7308,
      "after_combined": 0.2105,
      "prev_tail": "",
      "next_head": "",
      "restored_terms": [
        "Brightwell",
        "$18,000"
      ],
      "elapsed_s": 22.64,
      "after_gz": 0.1398,
      "after_pg": 0.2683,
      "tier_after": "WARM"
    }
  ],
  "fact_guard": {
    "status": "PASS",
    "summary_badge": "5/5 facts preserved · 0 dropped · 0 fabricated",
    "fact_recall": 1.0,
    "total_source_facts": 5,
    "preserved": [
      {
        "kind": "proper_noun",
        "source_text": "Brightwell",
        "matched_text": "Brightwell",
        "start_char": 98,
        "end_char": 108
      },
      {
        "kind": "date",
        "source_text": "March 3, 2026",
        "matched_text": "March 3, 2026",
        "start_char": 142,
        "end_char": 155
      },
      {
        "kind": "percentage",
        "source_text": "31%",
        "matched_text": "31%",
        "start_char": 206,
        "end_char": 209
      },
      {
        "kind": "percentage",
        "source_text": "44%",
        "matched_text": "44%",
        "start_char": 213,
        "end_char": 216
      },
      {
        "kind": "currency",
        "source_text": "$18,000",
        "matched_text": "$18,000",
        "start_char": 252,
        "end_char": 259
      }
    ],
    "altered": [],
    "dropped": [],
    "fabricated": [],
    "ui_quick_restore": []
  },
  "fact_guard_receipt": {
    "status": "PASS",
    "summary_badge": "5/5 facts preserved · 0 dropped · 0 fabricated",
    "fact_recall": 1.0,
    "total_source_facts": 5,
    "preserved": [
      {
        "kind": "proper_noun",
        "source_text": "Brightwell",
        "matched_text": "Brightwell",
        "start_char": 98,
        "end_char": 108
      },
      {
        "kind": "date",
        "source_text": "March 3, 2026",
        "matched_text": "March 3, 2026",
        "start_char": 142,
        "end_char": 155
      },
      {
        "kind": "percentage",
        "source_text": "31%",
        "matched_text": "31%",
        "start_char": 206,
        "end_char": 209
      },
      {
        "kind": "percentage",
        "source_text": "44%",
        "matched_text": "44%",
        "start_char": 213,
        "end_char": 216
      },
      {
        "kind": "currency",
        "source_text": "$18,000",
        "matched_text": "$18,000",
        "start_char": 252,
        "end_char": 259
      }
    ],
    "altered": [],
    "dropped": [],
    "fabricated": [],
    "ui_quick_restore": []
  },
  "timing": {
    "total_elapsed_s": 26.59,
    "gpu_elapsed_s": 22.64,
    "tok_per_sec": 23.8,
    "rewritten_blocks": 1,
    "locked_blocks": 0
  },
  "humanized_text": "But what we learned? Listening to our users and making a few tweaks goes a long way. Our team at Brightwell rolled out a new welcome flow on March 3, 2026, and activation rose from 31% to 44% within six weeks. The project cost $18,000 and took three engineers.",
  "after_xray": {
    "scores": {
      "local_gz": 0.1398,
      "local_pg": 0.2683,
      "local_combined": 0.2105,
      "combined": 0.2105,
      "verdict": "human",
      "band": "WARM"
    },
    "summary": {
      "total_words": 49,
      "total_blocks": 1,
      "clean_blocks": 0,
      "warm_blocks": 1,
      "hot_blocks": 0,
      "locked_structural_blocks": 0,
      "tell_phrase_count": 0,
      "rhythm_run_count": 0,
      "surprisal_clump_count": 0
    },
    "blocks": [
      {
        "block_id": "b0",
        "index": 0,
        "kind": "prose",
        "start_char": 0,
        "end_char": 260,
        "word_count": 49,
        "text": "But what we learned? Listening to our users and making a few tweaks goes a long way. Our team at Brightwell rolled out a new welcome flow on March 3, 2026, and activation rose from 31% to 44% within six weeks. The project cost $18,000 and took three engineers.",
        "local_gz": 0.1398,
        "local_pg": 0.2683,
        "local_combined": 0.2105,
        "tier": "WARM",
        "locked_default": false,
        "tell_count": 0,
        "rhythm_run_count": 0,
        "surprisal_clump_count": 0
      }
    ],
    "tell_phrases": [],
    "rhythm_runs": [],
    "surprisal_clumps": [],
    "annotations": {
      "tell_phrases": [],
      "rhythm_runs": [],
      "surprisal_clumps": []
    }
  },
  "usage": {
    "used_local_words": 455682,
    "quota_local_words": 10000000,
    "used_verified_audits": 2,
    "quota_verified_audits": 5000
  }
}

POST/v1/site-audit

Audit a whole site.

Give it a domain, a sitemap or a list of pages. It crawls them, scores every page and ranks the ones that read machine-made.

Request

input_modedefault "domain"
domain, sitemap or urls.
targetstring
The domain or the sitemap’s URL. url is accepted as another name for it.
urlsstring or array
The pages to read, for urls mode.
max_pages1 to 1,000, default 100
Stops after this many pages.
include_prefixesstring or array
Only paths that start with these. exclude_prefixes skips them.
min_words10 to 5,000, default 80
Shorter pages are skipped.
backgrounddefault true
Answers at once with a job_id (also sent as audit_id, the same value). false waits for the whole audit.

Polling and export

GET /v1/site-audit/{job_id}
The job, with status, progress_pct and the report once completed.
GET …/{job_id}/export.csv
One row per page, as CSV.
Request · start, poll, export
# 1. Start the audit. It answers at once with a job_id.
AUDIT=$(curl -s https://dropslop.ai/v1/site-audit \
  -H "Authorization: Bearer $DROPSLOP_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input_mode": "domain", "target": "https://paulgraham.com", "max_pages": 10}' | jq -r .job_id)

# 2. Poll until it is no longer running.
while [ "$(curl -s https://dropslop.ai/v1/site-audit/$AUDIT | jq -r .status)" = "running" ]; do
  sleep 5
done

# 3. Read the report, or take it as CSV.
curl -s https://dropslop.ai/v1/site-audit/$AUDIT
curl -s -o audit.csv https://dropslop.ai/v1/site-audit/$AUDIT/export.csv
Finished audit · saved 6 November, top-level fields
{
  "job_id": "audit_20261106_085538_1ea788b7",
  "input_mode": "domain",
  "target": "https://paulgraham.com",
  "domain": "paulgraham.com",
  "max_pages": 10,
  "min_words": 80,
  "status": "completed",
  "phase": "completed",
  "progress_pct": 100,
  "pages_discovered": 19,
  "pages_crawled": 10,
  "pages_scored": 8,
  "domain_slop_score": 12.8,
  "domain_verdict": "CLEAN",
  "domain_summary": {
    "domain_slop_score": 12.8,
    "word_weighted_slop_score": 11.1,
    "domain_p_ai": 0.1275,
    "domain_verdict": "CLEAN",
    "domain_verdict_detail": "CLEAN — Predominantly Human Editorial",
    "total_words_audited": 28412,
    "pages_scored": 8,
    "pages_skipped_short": 2,
    "distribution": {
      "CLEAN": {
        "count": 6,
        "pct": 75.0
      },
      "WARM": {
        "count": 2,
        "pct": 25.0
      },
      "HOT": {
        "count": 0,
        "pct": 0.0
      }
    }
  },
  "created_at": "2026-11-06T08:55:38Z",
  "completed_at": "2026-11-06T08:56:14Z",
  "top_10_worst_pages": […],
  "pages": […],
  "leaderboards": {…},
  "top_ai_tells": {…},
  …
}

MCPhttps://dropslop.ai/mcp

Use it from Claude and Cursor.

The same tools as an MCP server over HTTP. It takes the same key, and its calls count against the same allowance.

Six tools

  • dropslop_xrayThe X-Ray: paragraph scores, marked phrases, sentence rhythm.
  • dropslop_detectScores for one text or a batch.
  • dropslop_surgical_humanizeRewrites the paragraphs that read machine-made, with Fact-Guard.
  • dropslop_reroll_paragraphRewrites one paragraph, given the sentences around it.
  • dropslop_site_auditAudits a domain, sitemap or list of pages. Uses a verified audit.
  • dropslop_certifyIssues a certificate with a public check page. Uses a verified audit.

Before each call the server checks your remaining words. When there aren’t enough, the call returns an error instead of running.

Terminal
claude mcp add --transport http dropslop https://dropslop.ai/mcp \
  --header "Authorization: Bearer $DROPSLOP_KEY"
Check it by hand · the tool list
curl https://dropslop.ai/mcp \
  -H "Authorization: Bearer $DROPSLOP_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}'

Limits and errors.

Each key may make a set number of requests in any 60 seconds. Errors come back as JSON with a plain message.

Requests a minute

KeyRequests in any 60 s
No key30 X-Ray calls per connection
Pro120
Growth360
Agency1,000
With a top-up packAt least 180

Words and verified audits a month are on Pricing.

Error codes

429Too many requests. Wait a little and send it again. The window is the last 60 seconds.
402Allowance used up. From MCP tool calls, when there aren’t enough words or audits left.
401Key not valid. It is mistyped or revoked.
404Not found. No job or audit with that id.
422Bad request body. A field is missing or out of range, such as max_pages over 1,000.
429 for a Pro key · its fields in the server code
{
  "detail": {
    "error": "Rate limit exceeded (120/120 requests/min). Upgrade tier for higher RPM.",
    "remaining_words": null,
    "remaining_audits": null,
    "topup_endpoint": null
  }
}
429 without a key · the server’s message
{
  "detail": "Rate limit exceeded for anonymous X-Ray scans (max 30 per minute). Wait a moment and try again."
}
402 in an MCP tool result · its fields in the server code
{
  "jsonrpc": "2.0",
  "id": 7,
  "result": {
    "isError": true,
    "content": [{
      "type": "text",
      "text": "{ \"ok\": false, \"status_code\": 402, \"error\": \"Word quota exhausted (…/… words used). Top up or upgrade your Stripe plan via POST /v1/billing/checkout.\", \"remaining_words\": …, \"topup_endpoint\": \"https://dropslop.ai/v1/billing/checkout\", … }"
    }]
  }
}

Start with one call.