Neuroslop API
Connect detection, detailed analysis and humanization to your app or AI assistant through API and MCP.
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.
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.
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
- 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.
- Download neuroslop-mcp.mjs and add the config:
{
"mcpServers": {
"neuroslop": {
"command": "node",
"args": ["neuroslop-mcp.mjs"]
}
}
}
- 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:
- On the site — your account → API: pick a pack, pay by card, SBP or USDT — the key is issued instantly.
- In the Telegram bot — @AITextChecker_bot → «🔌 API»: pay with Telegram Stars, the key arrives in the chat.
Pricing: units
| Call | units | Operation |
|---|---|---|
POST /v1/check | 1 | Analysis, applicability and findings |
POST /v1/rewrite tier=flash | 30 / 2500 UTF-16 | Standard humanization |
POST /v1/rewrite tier=pro | 100 / 7500 UTF-16 | Premium 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
}
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
}
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.
| HTTP | error | Meaning |
|---|---|---|
| 401 | no_api_key / unknown_key / disabled | Missing, invalid or disabled key |
| 429 | rate_limited / quota | Request rate or unit quota exceeded |
| 409 | idempotency_conflict / idempotency_in_progress | Key reused for a different request, or the original is still running |
| 409 | idempotency_replay_unavailable / idempotency_receipt_corrupt | Saved result unavailable; do not start new work automatically |
| 400 | text_required / too_long / bad_json / invalid_idempotency_key / invalid_replay_only / idempotency_key_required | Invalid request; correct it before retrying |
| 413 | own_free_result_too_large | Local result exceeds the response limit; spent=0 |
| 502 | rewrite_error | Request failed; try saved-result recovery before starting new work |