You pay for a page only when it is a page.
Send a URL, get Markdown for a model or a search index. App shells, bot walls and error pages come back free, with the reason.
What comes back
| Verdict | When | Counted |
|---|---|---|
content | A real page: its Markdown, title, word count, final URL and a SHA-256 digest of the Markdown | Yes |
needs_javascript | Fewer than 50 words and the marks of an app that renders in the browser | No |
catch_all | The site answers a sibling path that cannot exist with the same document | No |
bot_wall | A challenge page. Cloudflare's passive detection script, which is on every page of a protected site, does not count as one | No |
consent_wall | A cookie banner with under 150 words behind it | No |
behind_sign_in | A redirect to a login path or host; the login page is never fetched | No |
thin | Fewer than 30 words | No |
http_error, unsupported_type, unreachable | An error status, a file that is not a page, or no answer | No |
Two answers from the live service, 25 October 2026
The first is a page on one of our own sites. The second is an address on another of our sites that does not exist; that site answers every address with its app.
{
"verdict": "content",
"billable": true,
"status": 200,
"title": "Install memory-pulse: Claude Code, Codex, Claude Desktop, Cursor, Python, CI",
"words": 878,
"content_sha256": "1dc2d654d1e606f71122d9e28256fb3f10bb4a10c92fe324b794d7575b835f73",
"markdown": "# Install memory-pulse\n\n..."
}{
"verdict": "not_content",
"reason": "needs_javascript",
"detail": "The page is an app shell that builds its content with JavaScript; this service reads pages over HTTP and does not run scripts.",
"billable": false,
"status": 200
}Call it
Every answer carries x-si-billable: 1 for a real page and 0 for anything else, and x-si-calls-remaining. A not_content answer is recorded and does not count against your calls.
curl -s -X POST https://strategic-innovations.ai/v1/api/verified-fetch/v1/fetch -H 'authorization: Bearer $SI_KEY' -H 'content-type: application/json' -d '{"url":"https://developers.cloudflare.com/workers/"}'Price
| Plan | Calls a day | Price |
|---|---|---|
| Free | 100 | $0 |
| Scale | 5,000 | $29 a month |
| Volume | 50,000 | $99 a month |
One key calls every API in the catalogue; the allowance belongs to the account. Bought and cancelled on your account page, through Stripe.
What it does not do
- It does not run JavaScript. A page built in the browser comes back as needs_javascript, and is not counted.
- It does not get past bot challenges or sign in for you.
- It reads HTML up to 2 MB and returns Markdown up to 200 KB; a longer page is cut and marked truncated.
- Signed receipts are not switched on yet. Each real page carries a SHA-256 digest of its Markdown, and the receipt says it is unsigned.
- It fetches only public http and https addresses on the default port.
How it was measured
On 25 October 2026 it was run on thirteen pages, twelve of them with the expected verdict written down first. Eleven of the twelve agreed. The miss was the expectation: our own home page refuses a plain HTML request from an unverified non-browser client and serves the same request when it also accepts Markdown.
Every API we run
This is one of 19 in the catalogue, which a machine can read at /apis.json.