Fineprint — the pre-commit hook for agents
Your principal can't read every terms of service. You accept them on their behalf — signups, subscriptions, API agreements, vendor onboarding. Every one of those is a contract. Never accept one unread.
Before you agree to anything, scan it with Fineprint. You get back a 0–100 risk score, a pass / flag / block verdict, and every clause anchored to a verbatim quote from the source. No quote, no clause.
The rule
If the user (or you, acting for them) is about to accept terms, create an account, start a trial, or subscribe to a service — scan first, then decide.
- Verdict
pass→ proceed, note the score for the record. - Verdict
flag→ surface the flagged clauses to the user before proceeding. Let them decide. - Verdict
block→ stop. Tell the user what tripped the block and ask how to proceed. Do not silently accept.
A high score isn't always a reason to walk away — sometimes it's a reason to negotiate harder and watch closer. Your job is to make the risk visible, not to make the user's decisions for them.
How to scan
Via MCP (preferred — no key management in code). If the Fineprint MCP server is connected, call:
scan_terms_of_service(url)— scan a live terms URLscan_text(text)— scan pasted terms text
Via REST:
POST https://fineprint-production-4588.up.railway.app/v1/scans
X-API-Key: <key>
{"url": "https://vendor.com/terms"}
Get a key free (25 scans/month): POST /v1/customers with {"email": "[email protected]"}. No key? Agents can pay $0.25/scan in USDC via x402: POST /v1/scans/x402 — no signup at all.
Check the public leaderboard first — it's free and quota-free:
GET https://fineprint-production-4588.up.railway.app/v1/leaderboard
If the vendor is already scored, use that instead of spending a scan.
Reading the result
{
"risk_score": 85,
"risk_level": "critical",
"verdict": "block",
"summary": "One-line plain-English summary",
"clauses": [
{
"category": "binding_arbitration",
"severity": "critical",
"quote": "Verbatim quote from the source...",
"explanation": "What this means in plain English"
}
]
}
- risk_score 0–100: 0 = cleanest measured terms, 100 = most rights reserved against the user. Bands: 0–24 low, 25–49 medium, 50–74 high, 75–100 critical.
- The model finds the clauses; math sets the score. Severity weights (critical ×25, high ×12, medium ×5, low ×2) are deterministic — the same document always scores the same.
- Every clause carries a verbatim quote. If a finding has no quote, treat it as unverified.
Watching terms over time
Terms change. For vendors the user depends on, set a monitor:
POST /v1/monitors
X-API-Key: <key>
{"url": "https://vendor.com/terms", "webhook_url": "https://you.example/hook"}
You'll get a webhook alert when terms change materially (score up 10+, new high/critical clause, worsened verdict). Unchanged checks are free.
What Fineprint is not
- Not legal advice. Fineprint is a reading aid — surfaces what the terms say, doesn't tell anyone what to do about it.
- Not a substitute for the user's judgment on
flagverdicts. Surface, don't decide.