{"openapi":"3.1.0","info":{"title":"slop.how","summary":"A fast and free API for detecting sloppy text","version":"2026-10-07","description":"Scores text against slop factors (stylistic tells common in AI-generated prose) using Cloudflare's Clef decision model. Returns a probability per factor. It does not judge whether a human or an AI wrote the text. Agent instructions: https://slop.how/llms.txt","contact":{"name":"slop.how on GitHub","url":"https://github.com/zeke/slop.how"},"license":{"name":"MIT","identifier":"MIT"}},"servers":[{"url":"https://api.slop.how"}],"externalDocs":{"description":"Source code and README","url":"https://github.com/zeke/slop.how"},"components":{"schemas":{"AnalyzeResponse":{"type":"object","properties":{"version":{"type":"string","description":"Factor definition version. Results change when this changes.","example":"2026-10-07"},"model":{"type":"string","enum":["clef","clef-flash","jev"],"description":"The model that produced these scores"},"factors":{"type":"object","properties":{"negation_reframe":{"$ref":"#/components/schemas/FactorResult"},"reflexive_triplets":{"$ref":"#/components/schemas/FactorResult"},"grandiose_stakes":{"$ref":"#/components/schemas/FactorResult"},"rhetorical_qa":{"$ref":"#/components/schemas/FactorResult"},"canned_opening":{"$ref":"#/components/schemas/FactorResult"},"announced_conclusion":{"$ref":"#/components/schemas/FactorResult"},"buzzwords":{"$ref":"#/components/schemas/FactorResult"},"hollow_transitions":{"$ref":"#/components/schemas/FactorResult"},"hype_adjectives":{"$ref":"#/components/schemas/FactorResult"},"vague_claims":{"$ref":"#/components/schemas/FactorResult"},"hedging":{"$ref":"#/components/schemas/FactorResult"},"over_structuring":{"$ref":"#/components/schemas/FactorResult"},"signposting":{"$ref":"#/components/schemas/FactorResult"},"chatbot_artifacts":{"$ref":"#/components/schemas/FactorResult"}},"required":["negation_reframe","reflexive_triplets","grandiose_stakes","rhetorical_qa","canned_opening","announced_conclusion","buzzwords","hollow_transitions","hype_adjectives","vague_claims","hedging","over_structuring","signposting","chatbot_artifacts"],"description":"Probability for every factor, keyed by factor id, highest probability first. See GET /v1/factors for definitions."},"usage":{"$ref":"#/components/schemas/Usage"}},"required":["version","model","factors","usage"]},"FactorResult":{"type":"object","properties":{"probability":{"type":"number","minimum":0,"maximum":1}},"required":["probability"],"description":"Probability (0 to 1) that the text exhibits this factor"},"Usage":{"type":"object","properties":{"chunks":{"type":"integer","exclusiveMinimum":0,"description":"Number of model calls. Long text is split into chunks."},"words":{"type":"integer","minimum":0,"description":"Word count of the submitted text"},"inputTokens":{"type":"integer","minimum":0,"description":"Input tokens billed across all chunks, including the factor questions"},"costUsd":{"type":"number","minimum":0,"description":"Estimated cost of this request in USD, from the model's per-token price"}},"required":["chunks","words","inputTokens","costUsd"],"description":"What the request cost"},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"},"issues":{"type":"array","items":{}}},"required":["error"]},"AnalyzeRequest":{"type":"object","properties":{"text":{"type":"string","maxLength":500000,"pattern":"\\S","description":"The text to analyze, up to 500,000 characters. Text over 20,000 words (10,000 on jev) is split into chunks, one model call each.","example":"In today's fast-paced digital landscape, it's important to note that..."},"model":{"type":"string","enum":["clef","clef-flash","jev"],"default":"clef","description":"Which decision model to score with:\n\n- `clef`: Default. Cloudflare's 27B decision model. The most precise in testing, with no false positives.\n- `clef-flash`: Clef's faster, cheaper 9B sibling. Misses a few more subtle cases.\n- `jev`: TypeSafe's Jev, via Cloudflare AI Gateway. About 6x cheaper than clef and a bit more sensitive, but flags slightly more false positives.","x-enumDescriptions":{"clef":"Default. Cloudflare's 27B decision model. The most precise in testing, with no false positives.","clef-flash":"Clef's faster, cheaper 9B sibling. Misses a few more subtle cases.","jev":"TypeSafe's Jev, via Cloudflare AI Gateway. About 6x cheaper than clef and a bit more sensitive, but flags slightly more false positives."}}},"required":["text"]},"FactorsResponse":{"type":"object","properties":{"version":{"type":"string"},"factors":{"type":"array","items":{"$ref":"#/components/schemas/Factor"}}},"required":["version","factors"]},"Factor":{"type":"object","properties":{"id":{"type":"string","enum":["negation_reframe","reflexive_triplets","grandiose_stakes","rhetorical_qa","canned_opening","announced_conclusion","buzzwords","hollow_transitions","hype_adjectives","vague_claims","hedging","over_structuring","signposting","chatbot_artifacts"]},"label":{"type":"string"},"instructions":{"type":"string"},"criteria":{"type":"object","properties":{"true":{"type":"string"},"false":{"type":"string"}},"required":["true","false"]},"advice":{"type":"string","description":"How to fix writing that shows this factor"}},"required":["id","label","instructions","criteria","advice"]}},"parameters":{}},"paths":{"/v1/analyze":{"post":{"summary":"Score text against the slop factors","requestBody":{"description":"Text to analyze","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeRequest"}}}},"responses":{"200":{"description":"Per-factor probabilities","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Clef returned an error or an unexpected response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/factors":{"get":{"summary":"List the slop factors and the questions sent to Clef","responses":{"200":{"description":"Factor definitions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FactorsResponse"}}}}}}}},"webhooks":{}}