API
Everything the web app does is available as a JSON API. Interactive reference: /docs.
Analyze a text
curl -s https://stoprop.tech/api/analyze \
-H 'Content-Type: application/json' \
-d '{"text": "Everyone knows the plan failed.", "sensitivity": "balanced", "private": false}'
Returns highlighted spans (start/end offsets, label, colour, confidence, plain-language explanation,
reported_speech, experimental), a profile, innocent_explanations,
mode (llm or heuristics_only) and token cost.
sensitivity: strict | balanced | broad.
private: true means the text is not written to the shared cache.
Offsets are Unicode code points (Python string indices). In JavaScript, convert them before slicing strings that contain emoji or other characters outside the Basic Multilingual Plane.
Analyze a link
curl -s https://stoprop.tech/api/analyze -H 'Content-Type: application/json' -d '{"url": "https://news.err.ee/..."}'
Stoprop fetches public web pages only (private, local and cloud-metadata addresses are refused, every redirect is
re-checked, 8 s / 2 MB limits), extracts the main text, and returns it as text together with
source (title, final URL, date) and receipts for the domain.
Check a source (receipts only, no AI)
curl -s https://stoprop.tech/api/receipts -H 'Content-Type: application/json' -d '{"domain": "err-news.ee"}'
Each receipt: type, status (found | not_found |
not_checked | error), flag (ok | warning |
neutral), plain-English text, evidence_url, checked_at.
Add "refresh": true to re-check items older than 15 minutes.
Taxonomy
curl -s https://stoprop.tech/api/techniques
Health and AI budget
curl -s https://stoprop.tech/api/health
Rate limits
Per client IP, per hour: analyze 30, receipts 60, swarm 10, feedback 30. Over the limit you get HTTP 429 with a plain message.
Coming: POST /api/swarm (M5), GET /api/metrics (M4).