Developers and agents
Read Asked Thrice programmatically
Everything on askedthrice.com that a script, a crawler or an AI assistant can consume directly: the machine-readable index, the markdown version of every public page, and the embeds that live on your site instead of ours.
Machine-readable index
Two files describe the whole site to an assistant. Start with llms.txt: it links every entry point instead of dumping content.
llms.txt
askedthrice.com/llms.txt
Router file: core pages, comparisons, product facts, and the prompts worth evaluating.
llms-full.txt
askedthrice.com/llms-full.txt
Long-form companion with the decision-stage content inlined, so one fetch answers a comparison question.
sitemap.xml
askedthrice.com/sitemap.xml
Every indexable URL with an honest lastmod, which is bumped when the page changes and not on every crawl.
robots.txt
askedthrice.com/robots.txt
What is open to crawlers and what is not. The dashboards and the API are closed; the public pages are open.
openapi.json
askedthrice.com/openapi.json
OpenAPI 3.1 specification of every public HTTP endpoint: operation ids, typed request and response schemas, the error shape, and the rate limit on each one. Lives at the root and not under /api, because robots.txt disallows /api.
curl https://askedthrice.com/openapi.json
Public API
The endpoints below answer without an account, an API key or a session cookie: they are the same ones the site's own forms and the MCP server call. Read the OpenAPI spec for the schemas; this is what each one is for. Every measurement spends real money at the model providers, so all of them are metered per caller and sit under a monthly budget that can pause them. Errors are always JSON, with a stable `code` and a `hint`.
POST /api/tools/repeat
askedthrice.com/api/tools/repeat
Ask one buyer question five times against one model and get back which brands were named every time, which appeared once, and the overlap between runs. The cheapest way to see the thesis: 3 calls per hour per IP.
curl -X POST https://askedthrice.com/api/tools/repeat \ -H "content-type: application/json" \ -d '{"question":"What is the best password manager for a small team?","provider":"openai"}'POST /api/check
askedthrice.com/api/check
One model, one pass: does it recognise the brand, does it name it in a blind list for the category, would it recommend it. Fast and shallow. 6 per hour and 20 per day per IP.
curl -X POST https://askedthrice.com/api/check \ -H "content-type: application/json" \ -d '{"brand":"Asked Thrice","category":"AI visibility tools"}'POST /api/audit
askedthrice.com/api/audit
The full free snapshot: crawls the site, classifies the vertical, asks several model APIs and repeats each prompt. Synchronous and slow (15 to 60 seconds, so allow 90). Returns an id for the buyer-question map. 6 per hour and 40 per day per caller.
curl -X POST https://askedthrice.com/api/audit \ -H "content-type: application/json" \ -d '{"brand":"Asked Thrice","website":"askedthrice.com","category":"AI visibility tools"}'POST and GET /api/audit/{id}/fanout-map
askedthrice.com/api/audit/{id}/fanout-map
Step two: asks the audit's buyer questions live and stores the answers. Idempotent, so the map comes back cached instead of costing a second measurement. POST starts it, GET polls it.
Error shape
askedthrice.com/openapi.json
Every error, including a 404 for a path that does not exist, is JSON with four fields: error (a sentence for a person), code (stable, branch on this), hint (what to do next) and docs. Rate limits answer 429 with Retry-After.
{"error":"No API endpoint at /api/nope.","code":"endpoint_not_found","hint":"Read https://askedthrice.com/openapi.json ...","docs":"https://askedthrice.com/developers"}
MCP server
The markdown views let an assistant read this site. The MCP server lets it run a measurement. Point any MCP client at the endpoint below: no signup, no key, one free measurement per domain every 30 days.
Endpoint
askedthrice.comhttps://mcp.askedthrice.com/mcp
Streamable HTTP transport. Works with Claude, Cursor, VS Code, and anything else that speaks MCP.
{"mcpServers":{"askedthrice":{"url":"https://mcp.askedthrice.com/mcp"}}}Discovery manifest
askedthrice.com/.well-known/mcp.json
The server described in the official MCP registry format, served from this domain so a client can find the endpoint without reading this page. The two competing .well-known drafts are served too: /.well-known/mcp (SEP-1960) and /.well-known/mcp/server-card.json (SEP-1649). All three are generated from one source, so they cannot drift.
curl https://askedthrice.com/.well-known/mcp.json
npm package (stdio bridge)
askedthrice.comhttps://www.npmjs.com/package/askedthrice-mcp
For clients that only launch a local command, like the Claude Desktop config file: npx askedthrice-mcp bridges stdio to the same remote endpoint. Same tools, same quota.
{"mcpServers":{"askedthrice":{"command":"npx","args":["-y","askedthrice-mcp"]}}}start_visibility_check
askedthrice.comhttps://mcp.askedthrice.com/mcp
Starts a measurement for a brand and returns a runId. Takes about a minute, because the buyer questions are asked live.
get_visibility_check
askedthrice.comhttps://mcp.askedthrice.com/mcp
Returns the verdict, how many buyer questions the brand won, which competitors were named instead, and which providers answered. It reports the measured answers, never a provider's self report.
Command line
The same measurements from a terminal or a shell script, without writing an HTTP client. Published on npm with no dependencies, so npx runs it without installing anything. Free, no account and no API key, under the same per-caller limits as the API.
askedthrice (npm)
askedthrice.comhttps://www.npmjs.com/package/askedthrice
Four commands over the public endpoints: check (does one model know the brand), repeat (ask one buyer question five times and see what moved), audit (the full free snapshot) and map (the buyer questions, asked live). Source at github.com/nahuelsoria/askedthrice-cli.
npx askedthrice check "your brand" --category "your category"
Machine-readable output
askedthrice.comhttps://www.npmjs.com/package/askedthrice
--json prints the raw API response, so the CLI composes with jq and with anything that reads stdout. Errors go to stderr with exit code 1, and print the same code and hint the API returns.
npx askedthrice repeat "best CRM for a small team" --json | jq '.metrics.once'
Markdown views
Every page listed below serves plain markdown from the same URL, either by adding .md or by asking for it with an Accept header. The site follows the acceptmarkdown.com convention: Content-Type: text/markdown; charset=utf-8 and Vary: Accept on both representations, and a 406 when the client refuses everything the URL can produce.
Any page, with .md
askedthrice.com/pricing.md
Add .md to the path: /pricing.md, /methodology.md, /developers.md, /changelog.md, /ai-instructions.md, /about.md, /contact.md, /reviews.md, /for/saas.md, /for/agencies.md, /alternatives.md, /compare.md, /blog.md, /rubros.md, /research.md, /learn.md, /es/visibilidad-ia.md, /es/herramientas-visibilidad-ia.md, plus every /compare/{slug} and /blog/{slug}.
curl https://askedthrice.com/pricing.md
Any page, by content negotiation
askedthrice.com/
Ask for markdown with the Accept header and the canonical URL answers in markdown, without a redirect.
curl -H "Accept: text/markdown" https://askedthrice.com/
Recoverable 404s
askedthrice.com/llms.txt
A path that does not exist returns a real 404 with a short markdown body pointing at the index files above, so an agent that guessed a URL can recover in one hop.
curl -H "Accept: text/markdown" https://askedthrice.com/does-not-exist
Embeds and public links
Two surfaces are meant to live outside askedthrice.com: the badge you can paste on your own site and the read-only link to a report.
AI visibility badge (SVG)
askedthrice.com/api/badge/{token}
An SVG that states whether the brand was measured and when. The token is minted from your own report, and the badge falls back to a re-check state 60 days after the last run.
<a href="https://askedthrice.com/badge/{token}"><img src="https://askedthrice.com/api/badge/{token}" alt="AI search visibility, measured by Asked Thrice" width="250" height="40"></a>Badge landing page
askedthrice.com/badge/{token}
Where the badge links: the brand, the month it was measured, and what was asked. Not indexable, shareable.
Shared report
askedthrice.com/share/{token}
Read-only view of a report, created from the report itself. No account needed to open it.
What does not exist yet
- Is there an API key, a paid tier or an SLA?
- No. The endpoints above are open and free, and that is the whole offer: no key to request, no plan to buy, no uptime promise. Every measurement spends real money at three model providers, so the free tier is metered per caller and a monthly budget can pause it. Plan for 429 and 503 as normal states. If you need volume, a guaranteed response or a contract, write and say what you would automate.
- Can I mint a badge or read someone else's report through the API?
- No. Badge tokens and share links are minted from a report by whoever owns it, and there is no endpoint that creates one. Everything under /api that touches a stored report, credits or a workspace needs a signed-in session and is deliberately absent from the OpenAPI spec.