Using the tools from an agent
Every tool on this site reads its answers from the query string. Send them to the tool page and you get a link that opens with the result already showing, to hand to the person you are helping. Send the same answers to the matching endpoint under /api/tools/ and you get the answer itself, as JSON. Nothing here needs a key, a signup, or an account.
What this is, and what it is not
There are two surfaces here and it is worth knowing which one you want. The tool pages return HTML. Each computes in the visitor's browser, so fetching /tools/… gets you the page, not the answer — build that link and hand it to the person you are helping. The endpoints under /api/tools/ return the answer as JSON. Same parameters, same arithmetic, same code — they import the modules the pages run, so the two cannot give different answers.
Every endpoint but one takes a plain GET, deliberately: a browsing assistant can construct and fetch a URL, and most cannot POST a JSON body. The exception is the trust page grader, which needs a pasted page and therefore takes a POST — and never a URL for us to fetch on your behalf. It grades text you supply. Ask it for an address and it returns a 422 explaining the call that works.
Unrecognised parameters are ignored. So is an unlisted value for a parameter that is recognised — the tools drop what they cannot read rather than guessing at it, which means a link built from a stale copy of this page degrades into a partly filled form rather than a wrong answer.
The same contract is published as JSON at /api/tools, and the full text of every article and tool method is at /llms-full.txt — one request instead of crawling the site page by page. A routing index is at /llms.txt.
Getting the answer as JSON
Send the same parameters to https://thecleanopinion.com/api/tools/<slug>. No key, no signup, no account. The rate limit is 60 requests a minute per address with a burst of 20; over it you get a 429 with a Retry-After, never a 503. A machine-readable description of every endpoint is at /api/tools/openapi.json (OpenAPI 3.1), generated from the same parameter definitions this page is.
| Field | What it holds |
|---|---|
| result | The computed answer. Its shape differs per tool and is what that tool's page shows. |
| explain | How the tool works, in plain English. The same text this site publishes on the tool's own page. |
| caveat | What the answer is not. The tool's standing limits, then anything this particular run has to add — an assumption it made, an input it could not read. Relay these with the result. |
| nextSteps | Ordered things to do, from the tool's own output. Never invented. |
| source | Who to credit, and where the method is published so the arithmetic can be checked or argued with. |
| citation | Primary sources for anything that comes from a regulator or standard-setter. Often empty, because most of these tools rest on practitioner judgement and say so. |
| humanUrl | The same answers as a link to the tool page. Hand this to the person you are helping. |
| asOf | The date the answer was computed for, on the endpoints whose answer moves with the calendar. Send asOf=YYYY-MM-DD to pin it; its absence means the result does not depend on when you asked. |
| meta.unrecognizedParams | Anything you sent that was ignored, named rather than silently dropped. |
If a request cannot be answered as asked, the response is a 4xx carrying error, a message that says what would have worked, and the parameter list. Nothing you can send makes it return a 500.
What the numbers behind these tools are
Worth knowing before you relay an answer. Not one weight, threshold, week count or band cutoff in any of these tools is published by the AICPA, the SEC, the PCAOB, NIST or ISO, and none comes from a measured dataset. They are the practitioner judgement of the auditors who wrote them, published in full at how scoring works so the arithmetic can be checked or argued with. Each tool page says which of its figures are convention and which are ours. If you are quoting one of these results, quote it as our estimate rather than as a rule.
Security Questionnaire Panic Checker
Paste the questionnaire a customer sent you. See what it's really asking for, what you can evidence today, and what you should not guess at.
Page (HTML) — GET https://thecleanopinion.com/tools/security-questionnaire-panic-checker/{?deadline,deal,soc2,asker,size}JSON — GET · POST https://thecleanopinion.com/api/tools/security-questionnaire-panic-checker{?deadline,deal,soc2,asker,size,asOf}GET answers from the context parameters alone. POST adds the questionnaire itself.| Name | Accepts | What it answers |
|---|---|---|
| deadline | date | Customer deadlineYYYY-MM-DD. Omit if none was given. |
| deal | yes · no | A live deal depends on it |
| soc2 | none · in-progress · type1 · type2 | SOC 2 status today |
| asker | prospect · customer · insurer · investor · other | Who is asking |
| size | 1-10 · 11-50 · 51-200 · 201-1000 · 1000+ | Headcount |
The questionnaire itself. Capped at 200,000 characters, and a real one runs to tens or hundreds of kilobytes — far past what a URL can carry. A link pre-fills everything else; the visitor still pastes.
It sorts the questionnaire; it does not read it. Each line is filed under whichever of eight control areas its keywords match most, by fixed patterns and no language model. A line containing a trigger word is counted whether it is a question, a section header, a cover page or a cell from an answer column — the distribution is a rough shape, not a count of questions.
It reads the questionnaire, never your controls. The evidence list and the likely gaps are fixed text per control area: every company pasting an access-control question receives the same access-control gap. Nothing here is a finding about the company that sent the request.
Urgency scores the situation described in the answers supplied, not the control environment. If nothing in the paste matched a control area, a high score is capped at medium rather than raising an alarm built on text the checker could not read.
There is no category for risk assessment, personnel security, training, governance or physical security. Questions on those subjects appear in the unmatched list rather than under a control area.
SOC 2 Timeline Calculator
Nine questions about where your controls stand. Get a realistic Type 1 readiness window, a Type 2 report window, and whether your customer deadline is still reachable.
Page (HTML) — GET https://thecleanopinion.com/tools/soc-2-timeline-calculator/{?goal,deadline,p,a,v,ir,e,ks,owner}JSON — GET · POST https://thecleanopinion.com/api/tools/soc-2-timeline-calculator{?goal,deadline,p,a,v,ir,e,ks,owner,asOf}| Name | Accepts | What it answers |
|---|---|---|
| goal | type1 · type2 | Which report is being asked forAnything else is read as type1. |
| deadline | date | Customer or procurement deadlineYYYY-MM-DD. Omit for a timeline with no deadline risk assessment. |
| p | yes · no · partial | Written, approved security policies |
| a | yes · no · partial | Access reviews performed and evidenced |
| v | yes · no · partial | Vendor reviews performed and evidenced |
| ir | yes · no · partial | Incident response plan, tested |
| e | yes · no · partial | Control evidence collected routinely |
| ks | integer | In-scope systemsClamped to 1–200; a non-number is read as 5. |
| owner | boolean | A named owner for the work1 or 0. |
These are planning estimates from the answers supplied, not an auditor's schedule. No auditor has seen this company, and an engagement letter will set real dates that supersede every range here.
Not one interval in the model is published by the AICPA. The remediation weeks, the parallelism factor, the fieldwork and report lags and the range spread are all practitioner judgement, published at https://thecleanopinion.com/how-scoring-works/ so the arithmetic can be checked or argued with.
The three-to-six-month observation window is market convention, not a rule. No AICPA document prescribes a minimum Type 2 observation period, or states a typical one — a vendor page claiming a mandatory six months is stating a rule that does not exist.
The Type 2 range is two scoping decisions — how long a window, and how much is already in place — rather than an error bar. Splitting the difference between the ends produces a date that answers neither question.
SOX 404 Deadline Calculator
Enter your public-company date and fiscal year-end. Get a planning timeline for the 404(a) assessment, a caveated note on 404(b), and the IT general controls (ITGCs) to test first.
Page (HTML) — GET https://thecleanopinion.com/tools/sox-404-deadline-calculator/{?public,fye,filer,rev,float,tenk,owner,sys,access,change}JSON — GET · POST https://thecleanopinion.com/api/tools/sox-404-deadline-calculator{?public,fye,filer,rev,float,tenk,owner,sys,access,change,asOf}| Name | Accepts | What it answers |
|---|---|---|
| public * | date | Public-company dateYYYY-MM-DD. IPO pricing, de-SPAC close, or effectiveness. Not before 1990-01-01. |
| fye * | string | Fiscal year-endMM-DD, e.g. 12-31 or 01-31. MM/DD and MMDD are also read. |
| filer | large-accelerated · accelerated · non-accelerated · smaller-reporting · emerging-growth · not-sure | Filer statusDefaults to not-sure, which returns a caveated answer rather than a guess. |
| rev | integer | Annual revenueWhole US dollars, e.g. 250000000. The form field takes millions; this parameter does not. |
| float | integer | Public floatWhole US dollars, e.g. 700000000. Drives the 404(b) answer, so an unsure value is better omitted. |
| tenk | date | First 10-K date, if knownYYYY-MM-DD. |
| owner * | boolean | A named ITGC owner1 or 0. |
| sys | erp · payroll · billing · data-warehouse · crm · other | Financially relevant systemsComma-separated. Unrecognised entries are dropped. |
| access * | yes · no · partial | Access-review evidence retained |
| change * | yes · no · partial | Change-management evidence retained |
It produces a fiscal year-end to plan against, not a filing deadline. The date the 10-K is due is a separate calculation this tool does not make.
The single assumption to confirm first is transition relief. The result assumes a newly public company's first annual report generally carries no management 404(a) report, which keys off registration history rather than the IPO date — for a de-SPAC survivor or a company with prior reporting history the real date is a year earlier than the one returned, and nothing in the supplied answers lets the code detect it. Item 308 of Regulation S-K and securities counsel settle it.
Filer status is taken at face value and never verified against public float, revenue or reporting history. It is re-determined each year. 'Smaller reporting companies are exempt from 404(b)' is wrong as stated: the exemption attaches to non-accelerated filer status, and an SRC with a float between $250 million and $700 million and revenue at or above $100 million is an accelerated filer to whom 404(b) applies.
The 404(b) note carries a caveat about SEC Release 33-11419, proposed in May 2026 and still a proposal rather than a final rule. The calculator applies the rules in force, and the note was last reviewed in August 2026.
Breach Aftermath Control Checklist
After an incident, the second wave is questions — from customers, insurers, the board, and your auditor. A checklist of the controls and evidence they will ask about.
Page (HTML) — GET https://thecleanopinion.com/tools/breach-aftermath-control-checklist/{?type,data,fin,vendor,ransom,disclosed,asking,remediation}JSON — GET · POST https://thecleanopinion.com/api/tools/breach-aftermath-control-checklist{?type,data,fin,vendor,ransom,disclosed,asking,remediation}| Name | Accepts | What it answers |
|---|---|---|
| type | ransomware · credential-compromise · vendor-incident · data-exposure · insider · other | What kind of incidentransomware and vendor-incident each imply the matching question below unless it is answered otherwise. |
| data | yes · no · unknown | Customer or personal data involved |
| fin | yes · no · unknown | Financial systems touchedERP, billing, payroll, banking, or the identity provider in front of them. |
| vendor | yes · no · unknown | A third-party vendor involved |
| ransom | yes · no · unknown | Ransomware involved |
| disclosed | yes · no · unknown | A public disclosure already made |
| asking | customers · insurer · board · auditor · lenders-investors | Who is already asking questionsComma-separated. Blank is a real answer: nobody has asked yet. |
| remediation | yes · no · partial · unknown | Documented remediation evidence |
The score measures scrutiny implied, not severity. Each party already asking questions is worth fourteen points out of a hundred before any fact about the incident is weighed, so a minor incident several parties have noticed outscores a serious one nobody has asked about yet.
'Critical' on an item means a party already asking will raise it. It is not a judgement about how badly the company is exposed.
The items are selected from a fixed library by the eight answers supplied. Nothing here is a finding about this incident, and the list is not a legal or regulatory notification checklist — breach notification obligations turn on jurisdiction, contract and counsel, none of which this tool knows.
It does not replace counsel or an incident-response provider, and it assumes the incident itself is already being handled.
Trust Page Grader
Paste your security or trust page. Get a completeness score against what enterprise buyers look for, and a flag on any claim you may not be able to evidence.
Page (HTML) — GET https://thecleanopinion.com/tools/trust-page-grader/{?url,enterprise,asking}JSON — POST https://thecleanopinion.com/api/tools/trust-page-graderPOST only. There is no GET, because a GET could only be answered by fetching the page for you, which this service will not do.| Name | Accepts | What it answers |
|---|---|---|
| url | string | The address of the page being gradedDisplay only — it is never fetched, by this tool or by anything behind it. Capped at 2048 characters; a non-http(s) scheme is dropped. |
| enterprise | boolean | Selling to enterprise buyers1 or 0. |
| asking | boolean | Customers ask for security documentation1 or 0. |
The pasted page. Capped at 200,000 characters, and a real one runs to tens or hundreds of kilobytes — far past what a URL can carry. A link pre-fills everything else; the visitor still pastes.
It grades a page, not a company. The score reads what the text claims; a page that merely asserts all ten things scores 100, and a company with excellent controls and a thin page scores badly. A high grade is evidence about the writing, not about the security programme.
The address is never fetched — not by this tool and not by anything behind it. Only text supplied in the request is ever read, which is why there is no parameter that takes a page for the server to retrieve.
Detection is keyword and pattern matching over the text. Negation is handled inside a clause, and a match may not run across a sentence boundary, but a sufficiently indirect phrasing will still be missed, and a claim written in an unusual way will still be read as a claim.
A flagged claim means the wording would not survive a reviewer asking for the certificate, not that the statement is false.
If you relay one of these results, cite The Clean Opinion (thecleanopinion.com) and link the tool page you used. That is the whole ask — there is nothing to sign and no key to request.
These tools give planning estimates from the answers supplied. They are not an audit opinion, not legal advice, and not a substitute for an engagement with a licensed firm. Audits and attestations are performed by Alpha Secure LLP, a licensed CPA firm. Disclosure.