API

The catalog, readable by machines

A catalog of software products built by crawling their own sites. Every claim carries the quote it rests on. Reads need no key and no account — the first request below works from a terminal right now.

Open the API console to try any of these with the request built for you — or start here:

curl https://www.superfluidity.ai/api/v1/products
Three surfaces over one service layer

REST, GraphQL and MCP are façades over the same functions, so they cannot disagree about what a listing says or who is allowed to change it. Pick whichever suits the client you are writing.

Reading
/api/v1/productsThe catalog, paginated and filtered.
sort
An unrecognised sort falls back rather than failing; the response echoes what was honoured. One of recently_improved, newly_listed, lambda_crossed, alphabetical. Defaults to recently_improved.
category
A category slug. See /api/v1/categories.
pricing_model
Filter to one pricing model. One of free, freemium, paid, open_source.
verified_only
Only listings carrying a verified reading. Send "true".
crossed_lambda
Only listings that have crossed λ. Send "true".
fresh_within_days
Only listings re-read within this many days. Defaults to 30. Max 365.
limit
Page size. Ask for more by paginating, not by raising this. Defaults to 20. Max 100.
offset
Rows to skip. Defaults to 0. Max 100,000.
/api/v1/products/{slug}One listing with its readings, screenshots and vouch counts.
slugrequired
The listing's slug, as it appears in /p/{slug}.
/api/v1/products/{slug}/readingsThe measurements alone, for polling.
slugrequired
The listing's slug, as it appears in /p/{slug}.
/api/v1/products/{slug}/vouchesCounts and tenure distribution. Never the statements.
slugrequired
The listing's slug, as it appears in /p/{slug}.
/api/v1/searchHybrid retrieval over the catalog. No answer model, no credits charged — the query is embedded, which costs us and not you.
qrequired
The search term.
limit
How many hits to return. Defaults to 10. Max 50.
/api/v1/categoriesCategories with at least one published product.
/api/v1/gapsMeasured demand: questions the catalog could not answer.
limit
How many gaps to return. Defaults to 50. Max 200.
/api/v1/gaps/{number}One gap, with the closest things already listed.
numberrequired
The gap's public number, as in /gaps/{number}.
/api/v1/statsPlatform figures, as of computed_at.
Writing

Writes authenticate by header only, never by session cookie, and require the `write` scope. A key is opt-in to writes at the moment it is issued.

POST /api/v1/askAsk the catalog a question and get an answer with the listings it rests on. Charged to the key's owner; an answer of "nothing here answers this" is free and says so. 1 credits. Needs an ask-scoped key; spends the key owner's credits.
queryrequired
The question, in your own words. Up to 500 characters.
POST /api/v1/productsSubmit a URL for crawling. 25 credits. Needs a write-scoped key; spends the key owner's credits.
urlrequired
The product's own canonical URL.
POST /api/v1/products/{slug}/refreshPay to re-crawl a listing you own. 10 credits. Needs a write-scoped key.
slugrequired
The listing's slug, as it appears in /p/{slug}.
Keys and limits

Reads work without a key at a low rate. A key raises the tier. Keys are issued at /settings/keys. Send it as Authorization: Bearer sf_live_… or X-API-Key: sf_live_….

60requests an hour without a key
1000with one

Every response carries RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, so a client can pace itself rather than discover the limit as a 429. Issue a key.

The same surface as OpenAPI 3.1: /api/v1/openapi.json. Import it into Postman or Insomnia, or generate a client from it.

llms-full.txt — the whole thing as one document, for a model · this page as JSON · what our crawler does