{"auth":{"header":"X-API-Key","how_to_obtain":"POST /v1/customers with {\"email\": \"...\"}; the api_key is returned once and never shown again","scheme":"X-API-Key"},"clause_taxonomy":["binding_arbitration","class_action_waiver","auto_renewal","unilateral_price_change","unilateral_modification","data_collection_scope","data_sharing_resale","data_training_use","data_retention_deletion","liability_cap","indemnification","termination_at_will","account_suspension","ip_assignment","jurisdiction_venue","sla_absence","usage_caps","bot_automation_ban","account_delegation","ai_agent_terms","automation_permitted"],"contact":"fineprintcorp100@gmail.com","description":"The contractual risk and policy enforcement layer for AI agents. ToS-parsing API for AI agents. POST a terms-of-service URL or pasted text and receive a structured ScanReport: quote-grounded risk clauses across a 21-category taxonomy, a deterministic 0-100 risk score, a pass/flag/block policy verdict, and a deterministic agent-friendliness verdict (friendly/restricted/hostile/unclear) — check whether the terms even permit AI agents before accepting on behalf of a principal.","endpoints":[{"auth_required":false,"description":"Liveness check. Returns status and version.","method":"GET","path":"/health"},{"auth_required":false,"description":"Create a customer and API key. Body: {\"email\": string}. Returns customer_id and api_key (shown once, prefixed fp_live_).","method":"POST","path":"/v1/customers"},{"auth_required":false,"description":"No-email trial key for agents: 5 scans/month, 1 monitor. No auth. Rate-limited to a few keys per IP per day. Returns customer_id and api_key (shown once).","method":"POST","path":"/v1/customers/anonymous"},{"auth_required":true,"description":"Quota status: tier, scans included this month, scans remaining.","method":"GET","path":"/v1/me"},{"auth_required":true,"description":"Scan a document. Body: {\"url\": string} or {\"text\": string, \"source_url\": string}, optional \"policy_id\". Returns a ScanReport with clauses, risk_score, risk_level, score_breakdown (per-severity counts/points behind the score), content_hash (SHA-256 fingerprint of the exact document text scored), verdict, dealbreakers, recommended_actions, plus agent_friendliness (friendly/restricted/hostile/unclear), agent_friendliness_notes, and agent_access — the structured form of the verdict: {automated_access, account_delegation, ai_agent_terms, official_channels_required} — whether the terms permit AI agents at all, in fields an agent can branch on. Repeat scans of unchanged documents are served from cache. Returns 503 with setup instructions if no LLM key is configured server-side.","method":"POST","path":"/v1/scans"},{"auth_required":true,"description":"Retrieve a previously generated ScanReport by id.","method":"GET","path":"/v1/scans/{scan_id}"},{"auth_required":true,"description":"Negotiation playbook for a scan: for each flagged clause, what to ask the vendor for, an acceptable fallback, your leverage, and the walk-away signal. Ordered riskiest first.","method":"GET","path":"/v1/scans/{scan_id}/playbook"},{"auth_required":true,"description":"Create a policy profile owned by your API key: named rule set mapping clause categories to block/flag actions. Body: {\"name\": string, \"description\": string, \"rules\": [{\"id\": string, \"clause_category\": string, \"action\": \"block\"|\"flag\", \"note\": string}]}. Returns the profile with id. Only you can see or use your policies. Requires X-API-Key.","method":"POST","path":"/v1/policies"},{"auth_required":true,"description":"List policy profiles visible to you: the built-in system policies (policy_standard, policy_strict, policy_procurement) plus your own custom policies.","method":"GET","path":"/v1/policies"},{"auth_required":true,"description":"Fetch one policy profile by id (built-in or your own).","method":"GET","path":"/v1/policies/{policy_id}"},{"auth_required":true,"description":"Delete one of your own custom policies. System policies cannot be deleted.","method":"DELETE","path":"/v1/policies/{policy_id}"},{"auth_required":false,"description":"Embeddable SVG 'nutrition label' badge with a service's live published ToS risk score. Public, no key. Hotlink it on your site.","method":"GET","path":"/v1/badge/{service}.svg"},{"auth_required":false,"description":"Auto-generated OpenAPI documentation (interactive).","method":"GET","path":"/docs"},{"method":"POST","path":"/v1/leaderboard/publish","auth_required":true,"description":"Publish a scan to the public leaderboard. Body: {\"scan_id\": string} or {\"url\": string, \"service\": string}. One entry per URL; latest scan wins. Publishing via url consumes one scan of quota."},{"method":"GET","path":"/v1/leaderboard","auth_required":false,"description":"Public ToS risk ranking, no auth, free reads, no quota consumed. Query: ?limit= (default 50, max 200), ?since= (ISO-8601), ?q= (service name search). Sorted by risk_score descending; entries older than 30 days are flagged stale."},{"method":"GET","path":"/v1/leaderboard/service/{service}","auth_required":false,"description":"Full published ScanReport for one service (clauses, quotes, score), public by design — powers the landing-page demo. No auth, no quota. 404 if no published report."},{"method":"POST","path":"/v1/billing/checkout","auth_required":true,"description":"Create a Stripe checkout session to subscribe to a paid tier. Body: {\"tier\": \"pro\"|\"team\" (default \"pro\")}. Returns {\"checkout_url\": string, \"tier\": string}. 503 if billing is not configured server-side."},{"method":"DELETE","path":"/v1/leaderboard/service/{service}","auth_required":true,"description":"Remove a leaderboard entry by service name (e.g. a bad scan). Same auth as publish."},{"method":"POST","path":"/v1/monitors","auth_required":true,"description":"Watch a ToS URL for changes. Body: {\"url\": string, \"interval_days\": 1-90 (default 7), \"webhook_url\": string, \"policy_id\": string}. Establishes a quoted, scored baseline immediately (costs 1 scan of quota). Free: 3 monitors; Pro: 50."},{"method":"GET","path":"/v1/monitors","auth_required":true,"description":"List your monitors: baselines, last check times, plan limit."},{"method":"POST","path":"/v1/monitors/check-due","auth_required":true,"description":"Check every due monitor for this API key. Point a cron job here with X-API-Key. Unchanged documents are free to check; changed documents consume 1 scan and may raise a material-change alert."},{"method":"GET","path":"/v1/monitors/{monitor_id}","auth_required":true,"description":"Monitor detail with recent check history (diffs, alerts, webhook status)."},{"method":"DELETE","path":"/v1/monitors/{monitor_id}","auth_required":true,"description":"Stop watching a URL."},{"method":"POST","path":"/v1/monitors/{monitor_id}/check","auth_required":true,"description":"Run a check on demand. Returns {changed, score_delta, new_clauses, removed_clauses, alert, webhook_status}."},{"method":"POST","path":"/v1/scans/batch","auth_required":true,"description":"Scan up to 20 vendor URLs in one call; each scan costs one quota unit. Body: {\"urls\": [string], \"policy_id\"?: string}. Per-URL failures are reported inline and never fail the batch. Returns results plus a riskiest-first ranking of scan_ids."},{"method":"POST","path":"/v1/scans/compare","auth_required":true,"description":"Compare 2-20 previous scans: vendor ranking plus a category-by-category matrix of worst severity per vendor. Body: {\"scan_ids\": [string]}. Free — uses already-paid-for scans, consumes no quota."},{"method":"GET","path":"/v1/scans/{scan_id}/report.pdf","auth_required":true,"description":"Branded single-vendor audit report PDF (verdict, score, all findings with source quotes, methodology, evidence provenance). Rendering is free."},{"method":"POST","path":"/v1/reports/audit-pack.pdf","auth_required":true,"description":"Multi-vendor audit pack PDF: ranking, comparison matrix, per-vendor detail. Body: {\"scan_ids\": [string], \"title\"?: string}. The five-vendor audit deliverable in one call."},{"method":"POST","path":"/v1/scans/x402","auth_required":false,"description":"Keyless pay-per-scan via x402 ($0.25/scan in USDC on Base) — rolling out. First call returns 402 with payment requirements; sign with your wallet and retry with the X-PAYMENT header. Contact us to enable."}],"grounding_guarantees":["Every clause carries a quote verified against the source document — verbatim, or a ≥ 0.85 fuzzy match with the match type exposed per clause (schema-enforced minimum length). No quote, no clause.","Risk scoring and policy verdicts are deterministic functions of extracted clauses; no LLM participates in scoring.","Off-taxonomy categories are dropped, never passed through. The taxonomy is the contract.","Every report carries a disclaimer: Fineprint is automated informational analysis, not legal advice, and Fineprint is not a law firm."],"name":"Fineprint","pricing":{"quota_resets":"monthly","tiers":[{"id":"free","name":"Free","price_usd_per_month":0,"scans_per_month":25,"monitors":3},{"id":"pro","name":"Pro","price_usd_per_month":19.99,"scans_per_month":500,"monitors":50},{"id":"team","name":"Team","price_usd_per_month":79.99,"scans_per_month":2500,"monitors":200},{"id":"trial","name":"Trial","price_usd_per_month":0,"scans_per_month":5,"monitors":1,"note":"No-email keys via POST /v1/customers/anonymous; rate-limited per IP"}],"overage_usd_per_scan":0.15,"overage_note":"Pro and Team tiers only, require an active subscription; metered via Stripe.","pay_per_call":{"protocol":"x402","price_usd_per_scan":0.25,"rails":[{"network":"base","asset":"USDC"},{"network":"xrpl:0","asset":"XRP"},{"network":"xrpl:0","asset":"RLUSD"}],"endpoint":"POST /v1/scans/x402","flow":"call without X-PAYMENT -> 402 with payment requirements -> sign with wallet -> retry with base64 payload in X-PAYMENT","requires":"server configured with X402_PAY_TO (EVM rail) and/or X402_XRPL_PAY_TO (XRPL rail)"}},"quotas":{"free_scans_per_month":25,"pro_scans_per_month":500,"team_scans_per_month":2500,"trial_scans_per_month":5,"free_monitors":3,"pro_monitors":50,"team_monitors":200,"trial_monitors":1},"risk_score":{"deterministic":true,"levels":{"critical":">=75","high":">=50","low":"<25","medium":">=25"},"range":[0,100],"weights":{"critical":25,"high":12,"info":0,"low":2,"medium":5}},"tagline":"Terms of service, translated for machines.","verdicts":{"semantics":"block if any clause matches a block rule in the policy profile; else flag if any matches a flag rule; else pass","values":["pass","flag","block"]},"version":"0.1.0","integrations":{"mcp":{"description":"Native MCP server: 13 tools (scan_terms_of_service, scan_terms_text, batch_scan_terms, compare_scans, get_scan_report, get_tos_leaderboard, check_quota, watch_terms, list_monitors, list_policies, create_policy, get_negotiation_playbook, check_agent_access).","server_file":"mcp_server.py","env":["FINEPRINT_API_URL","FINEPRINT_API_KEY"],"registry_manifest":"marketing/mcp/server.json","transports":["stdio","streamable-http"]},"mcp_tools":["scan_terms_of_service","scan_terms_text","batch_scan_terms","compare_scans","get_scan_report","get_tos_leaderboard","check_quota","watch_terms","list_monitors","list_policies","create_policy","get_negotiation_playbook"]}}