Neuroslop API

Connect detection, detailed analysis and humanization to your app or AI assistant through API and MCP.

Get an API key Endpoints Markdown

Who it is for

Content platforms and CMS

Screen and QA text in the pipeline: flag machine slop before it goes live, humanize on demand.

Agencies and SEO tools

Check and humanize in bulk under your own product. One key, unit-based, no manual approval.

EdTech and writing tools

Score submissions and give writers a self-check with the exact markers, not a black-box percentage.

Why this API

Deterministic checks

The website's rule-based check is reproducible for the same input, settings, engine version and rule/dictionary snapshot.

Detect and fix in one key

Check and humanize with one key. Before/after scores are returned when applicable; unavailable scores are null.

Language-aware results

The response reports applicability. Russian and English have the most developed prose rules; other languages can have limited analysis.

Pricing: units

API checking and rewriting for apps, bots and MCP. Unit costs depend on the operation and text length. The quota terms are shown for each pack; existing keys retain their purchased terms.

Pay by card, SBP or USDT on the website, or Telegram Stars in the bot. Display prices are estimates; the payment screen shows the exact amount and currency.

Pricing

A 3,000-unit pack is 3,000 checks, or 100 Standard humanizations, or 30 Premium. Checks are weight 1, Standard 30 per 2,500 characters, Premium 100 per 7,500.

Endpoints

MCP server

Connect neuroslop to your AI agent via MCP — it checks text for slop, humanizes it and strips hidden characters on its own. Works in Claude Code, Cursor, Codex, OpenClaw.

neuroslop_check

Check AI writing signals, recurring constructions, rhythm and text structure. See the specific passages and explanations behind the result. Free and keyless through the hosted HTTPS API; anti-abuse rate limits apply.

neuroslop_humanize

Humanize AI drafts: reshape the delivery, make the language more natural and compare versions while checking important details. Only neuroslop_humanize requires an API key.

neuroslop_clean

Strips hidden characters: zero-width spaces, homoglyphs. Local, no key needed.

How to connect

  1. Free and keyless through the hosted HTTPS API; anti-abuse rate limits apply. Strips hidden characters: zero-width spaces, homoglyphs. Local, no key needed. Only neuroslop_humanize requires an API key.
  2. Download neuroslop-mcp.mjs and add the config:
{
  "mcpServers": {
    "neuroslop": {
      "command": "node",
      "args": ["neuroslop-mcp.mjs"]
    }
  }
}
  1. Replace the absolute path. NEUROSLOP_API_KEY is optional and is used only by neuroslop_humanize; neuroslop_check and neuroslop_clean work without a key.

Connect to your agent (MCP) Get a key in your account

Authentication

MCP checks use the free, rate-limited POST /api/check route. POST /v1/check requires a key and uses its units. GET /v1/health needs no key.

For /v1/check, /v1/rewrite and /v1/balance, send your key in a header: Authorization: Bearer <key> / X-API-Key: <key>.

Get a key two ways, no manual approval:

Pricing: units

CallunitsOperation
POST /v1/check1Analysis, applicability and findings
POST /v1/rewrite tier=flash30 / 2500 UTF-16Standard humanization
POST /v1/rewrite tier=pro100 / 7500 UTF-16Premium humanization

POST/v1/check

Body: { "text": "...", "lang": "en" } (lang optional). Up to 20,000 characters.

Default limit for both endpoints: 20,000 UTF-16 code units, including spaces. A deployment may set a lower cap; GET /v1/health reports limits.maxInputChars, and too_long errors report max.

Examples below show selected response fields, not measured customer results. Scores and balances will differ.

curl -X POST https://neuroslop.net/v1/check \
  -H "Authorization: Bearer ns_YOURKEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"The team utilizes this checklist to review each draft before publication.","lang":"en"}'

Response:

{
  "score": 100,
  "lang": "en",
  "ruleCoverage": "full",
  "scoreInterpretation": "style_rules_not_authorship",
  "applicability": { "status": "applicable", "eligible": true },
  "decision": {
    "outcome": "human_like",
    "action": "show_style_signal",
    "abstained": false,
    "confidence": null,
    "confidenceKind": "not_calibrated"
  },
  "assessment": {
    "outcome": "human_like",
    "authorshipProbability": null,
    "automaticRewrite": false
  },
  "remaining": 2999
}

Read applicability, decision and assessment before using a score. A 0–100 score is not an authorship probability; null means unavailable, not zero. lang describes the text, not the interface.

POST/v1/rewrite

Body: { "text": "...", "tier": "flash", "lang": "en" }. tier is flash (Standard, default) or pro (Premium). The input limit is reported by /v1/health.

curl -X POST https://neuroslop.net/v1/rewrite \
  -H "Authorization: Bearer ns_YOURKEY" \
  -H "Idempotency-Key: YOUR_UNIQUE_REQUEST_ID" \
  -H "Content-Type: application/json" \
  -d '{"text":"The team utilizes this checklist to review each draft before publication.","tier":"pro","lang":"en"}'

Response:

{
  "text": "Your revised paragraph appears here.",
  "tier": "pro",
  "scoreBefore": 100,
  "scoreAfter": 100,
  "qualityBasis": "editorial_review",
  "spent": 100,
  "remaining": 2900
}
Read spent for the units used by this response. Local recovery and original returns use spent=0, even when a local edit changed the text. Do not infer a charge from text changes or scores.

qualityBasis describes the check, not the charge. Values include editorial_review, deterministic, bounded-source-witness, unchanged and unverified; do not treat this as a closed list. A higher detector score is not required for an approved rewrite.

{
  "text": "The team uses this checklist to review each draft before publication.",
  "tier": "pro",
  "scoreBefore": 100,
  "scoreAfter": 100,
  "unchanged": false,
  "reason": "local_edited",
  "qualityBasis": "deterministic",
  "engine": "local-rules",
  "editorialApproved": false,
  "billable": false,
  "spent": 0,
  "remaining": 3000
}
{
  "text": "Original text is returned here.",
  "tier": "pro",
  "scoreBefore": null,
  "scoreAfter": null,
  "unchanged": true,
  "reason": "local_unchanged",
  "qualityBasis": "unchanged",
  "spent": 0,
  "remaining": 3000
}
For safe retries, send a unique Idempotency-Key with each rewrite. The same key and request replay the original response without another rewrite or charge; a changed request returns 409. This opt-in keeps the terminal response encrypted for up to 24 hours in a separate live cache excluded from application-managed backups. Without this header no response cache is created.

replayOnly: true

To retrieve a saved result without starting work, reuse the original Idempotency-Key, text, tier, lang and mode, adding replayOnly:true. A missing or expired receipt returns 409 idempotency_replay_unavailable, not a new rewrite. This does not prove whether the original request was charged. Do not automatically retry with a new key.

curl -X POST https://neuroslop.net/v1/rewrite \
  -H "Authorization: Bearer ns_YOURKEY" \
  -H "Idempotency-Key: YOUR_UNIQUE_REQUEST_ID" \
  -H "Content-Type: application/json" \
  -d '{"text":"The team utilizes this checklist to review each draft before publication.","tier":"pro","lang":"en","replayOnly":true}'

GET/v1/balance

Key quota left: { plan, quota, used, remaining, resetMonth, perMinute }.

quotaMode: "one_time", resetMonth: null
One-time unit pack. No monthly refill.
quotaMode: "monthly"
Monthly quota. Refills each calendar month.

GET/v1/health

Service liveness, no key needed: { "ok": true, "llm": true, "limits": { "maxInputChars": 20000 } }.

Errors

Handle error responses before using text. A timeout or 502 is not proof of the charge status: try saved-result recovery. Do not blindly retry authentication, quota or conflicting-key errors.

HTTPerrorMeaning
401no_api_key / unknown_key / disabledMissing, invalid or disabled key
429rate_limited / quotaRequest rate or unit quota exceeded
409idempotency_conflict / idempotency_in_progressKey reused for a different request, or the original is still running
409idempotency_replay_unavailable / idempotency_receipt_corruptSaved result unavailable; do not start new work automatically
400text_required / too_long / bad_json / invalid_idempotency_key / invalid_replay_only / idempotency_key_requiredInvalid request; correct it before retrying
413own_free_result_too_largeLocal result exceeds the response limit; spent=0
502rewrite_errorRequest failed; try saved-result recovery before starting new work
Get an API key