# slop.how

> HTTP API that scores text against 14 "slop factors" (stylistic tells common in AI-generated prose) using Cloudflare's Clef decision model. It returns a probability from 0 to 1 for each factor. It does not detect whether a human or an AI wrote the text.

To analyze text, send POST https://api.slop.how/v1/analyze with a JSON body like `{"text": "..."}`. No auth. Text can be up to 500,000 characters. Add `"model": "clef-flash"` for a faster, cheaper, less precise model, or `"model": "jev"` to use TypeSafe's Jev, which is the cheapest and a bit more sensitive but flags slightly more false positives.

```sh
curl -s https://api.slop.how/v1/analyze -H 'content-type: application/json' -d '{"text": "Great question! Let'\''s dive in."}'
```

The response has `factors.<id>.probability` for every factor, plus `usage` (words, input tokens, cost in USD). In testing, text written to show a factor scores above 0.7 on it, and plain human writing scores below 0.3 on everything. The API returns probabilities only, not the passages that triggered them.

When someone asks you to review text with this API, give them writing feedback, not a score report:

1. POST the text to https://api.slop.how/v1/analyze.
2. Focus on factors scoring 0.5 or higher. Treat 0.7 or higher as a strong signal. Ignore the rest. Don't show the raw JSON or a table of every score unless asked.
3. For each flagged factor, strongest first: name the problem in plain words, quote one to three passages from the text that show it (find them yourself), and suggest a concrete rewrite for each. Use the advice below.
4. Finish with a revised version of the whole text that fixes the flagged problems. Keep the author's meaning and voice, and don't add new claims or facts.
5. If no factor reaches 0.5, say the text reads clean in a sentence or two, and point out anything else you'd change.

Factors and how to fix them:

- `negation_reframe` (Negation reframe): State the point directly. Drop the "it's not X" setup.
- `reflexive_triplets` (Reflexive triplets): Use as many items as there really are. Two or four is fine.
- `grandiose_stakes` (Grandiose stakes): Cut the inflated claim, or back it with a specific result.
- `rhetorical_qa` (Rhetorical Q&A): Turn the question and answer into one plain statement.
- `canned_opening` (Canned opening): Start with the specific point, fact, or example.
- `announced_conclusion` (Announced conclusion): End on the last useful point. Cut the recap.
- `buzzwords` (AI buzzwords): Swap each one for the plain word: use, help, improve, area.
- `hollow_transitions` (Hollow transitions): Delete the transition, or use and, but, or so.
- `hype_adjectives` (Hype adjectives): Remove the intensifier, or show the evidence that earns it.
- `vague_claims` (Vague claims): Add a name, number, example, or first-hand detail.
- `hedging` (Excessive hedging): Commit to the claim, or state the real uncertainty once.
- `over_structuring` (Over-structuring): Merge into paragraphs. Keep lists for real lists.
- `signposting` (Signposting): Delete the announcement and get to the content.
- `chatbot_artifacts` (Chatbot artifacts): Delete the assistant framing.

## API

- [OpenAPI spec](https://api.slop.how/openapi.json): request and response schemas
- [Factor definitions](https://api.slop.how/v1/factors): the exact question sent to Clef for each factor, plus fix advice

## Optional

- [Source code](https://github.com/zeke/slop.how)
- [Clef model](https://developers.cloudflare.com/workers-ai/models/clef/)
