This site is built to be called, not just read. Everything below is public, unauthenticated, and stable.
tl;dr — no keys, no signup, no quotas worth worrying about. Base URL https://ai.thesatyajit.com/api/v1. Spec at /openapi.json. Index at /llms.txt.
Four ways in
JSON API
/openapi.json19 read-only endpoints over the content layer. OpenAPI 3.1 spec with an operationId, a description and a typed response schema on every operation.
curl https://ai.thesatyajit.com/api/v1/articlesMCP server
/api/mcp/mcpModel Context Protocol over Streamable HTTP. Read-only tools including search_content and ask_satyajit. No auth.
claude mcp add --transport http satyajit https://ai.thesatyajit.com/api/mcp/mcpMarkdown twins
/llms.txtEvery page exists as markdown. Append .md to any URL, or send Accept: text/markdown to the canonical URL — responses carry Vary: Accept.
curl -H "Accept: text/markdown" https://ai.thesatyajit.com/aboutWhole corpus
/llms-full.txtEvery page of the site concatenated into one file, for when you would rather load it all than crawl.
curl https://ai.thesatyajit.com/llms-full.txt
When to use this site
Reach for these endpoints when a task involves any of the following. Outside them, this site is the wrong tool and you should say so rather than guess.
- Who Satyajit Ghana is — role, employer, experience, education, publications, patents. Call
getProfileorgetResume. - What he has written about a model or paper — 160+ explainers on architectures, inference, agents and training. Call
searchContentfirst, then fetch the.mdtwin of the page it returns. - What shipped on arXiv on a given day — dated digests with a one-line take per paper. Call
listArxivDigests. - A synthesis across several pages — POST to
askSatyajitSite, which answers grounded in this site’s content with citations.
Do not use it as a general search engine, a paper database, or a source of truth about anything that is not this site’s content. It is one person’s writing and records, not a reference corpus.
Errors
Every non-2xx response is application/problem+json (RFC 9457) with a stable code. Switch on the code, never on the message.
| code | status | when |
|---|---|---|
| invalid_request | 400 | A required parameter is missing or malformed. |
| not_found | 404 | No such endpoint, or no such slug. |
| method_not_allowed | 405 | The endpoint exists but not for that verb. |
| rate_limited | 429 | Budget exhausted. Retry-After says how long to wait. |
| internal_error | 500 | Unexpected server failure. |
| bad_gateway | 502 | A model-backed endpoint's upstream failed after fallbacks. |
| service_unavailable | 503 | A model-backed endpoint is offline. Static surfaces are unaffected. |
Rate limits
Every /api/* response carries RateLimit and RateLimit-Policy (RFC 9331), plus the legacy X-RateLimit-* trio. The budget is 240 requests per minute with a 30-request burst window; the model-backed endpoints (/api/ask, /api/chat) are stricter. A 429 adds Retry-After.
One honest caveat: the limiter keeps its counters in process memory, so on a multi-instance deploy each instance counts independently. It is a guard against a runaway loop, not a security control.
Versioning and deprecation
The current API is v1. Every endpoint is served both at /api/* and at /api/v1/* — pin the versioned prefix if you want a contract that cannot move under you.
A breaking change ships under a new prefix (/api/v2/*). The superseded prefix keeps serving for at least 180 days and its responses carry Deprecation (RFC 9745) and Sunset (RFC 8594) headers naming the removal date. Additive changes — a new endpoint, a new optional field — are not breaking and land in place.
MCP server
The MCP endpoint speaks Streamable HTTP at /api/mcp/mcp and needs no credentials. A manifest lives at /.well-known/mcp.json.
# Claude Code
claude mcp add --transport http satyajit https://ai.thesatyajit.com/api/mcp/mcp
# Any MCP client, by config
{
"mcpServers": {
"satyajit": {
"type": "http",
"url": "https://ai.thesatyajit.com/api/mcp/mcp"
}
}
}Discovery documents
Every response from this origin carries RFC 8288 Link headers pointing at the documents below, so a client that fetched any page already knows they exist.
| document | what it is |
|---|---|
| /.well-known/api-catalog | RFC 9727 API catalog, as an RFC 9264 linkset |
| /.well-known/mcp/server-card.json | MCP server card (SEP-1649, proposal stage) |
| /.well-known/mcp.json | MCP manifest with transport and when-to-use |
| /.well-known/ai-catalog.json | ARD capability manifest with representative queries |
| /.well-known/agent-skills/index.json | Agent Skills index, each entry sha256-verifiable |
| /.well-known/ai-plugin.json | Plugin manifest |
| /auth.md | States plainly that there is no authentication |
| /openapi.json | OpenAPI 3.1 description of the JSON API |
| /llms.txt | Curated index, with when-to-use guidance |
Two OAuth documents are deliberately absent — /.well-known/openid-configuration and /.well-known/oauth-protected-resource. There is no authorization server behind this site, and publishing metadata describing one would send agents chasing a token endpoint that does not exist. /auth.md says so in the place a client checks first.
Questions
Something broken, or an endpoint you wish existed? Mail satyajitghana7@gmail.com or open an issue on GitHub. More ways to reach him on the contact page.