[Neuroslop](https://neuroslop.net/en/)

/API

# Neuroslop API

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

[Get an API key](https://neuroslop.net/#api-offers)
[Endpoints](https://neuroslop.net/#endpoints)
[Markdown](https://neuroslop.net/en/api.md)

## 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](https://neuroslop.net/en/pricing#apikeys)

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](https://neuroslop.net/#api-unit-costs)

## 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](https://neuroslop.net/downloads/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)](https://neuroslop.net/mcp) [Get a key in your account](https://neuroslop.net/account#api)

## 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](https://neuroslop.net/account#api): pick a pack, pay by card, SBP or USDT — the key is issued instantly.

In the Telegram bot — [@AITextChecker_bot](https://t.me/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
}
```

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.

| 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 |

[Get an API key](https://neuroslop.net/#api-offers)

---
https://neuroslop.net/en/api

## api

- apikey_start: 4.5 USDT; units=3000; quotaMode=one_time.
- apikey_business: 14 USDT; units=11000; quotaMode=one_time.
- apikey_max: 36 USDT; units=30000; quotaMode=one_time.

