khe.money API
A small, public, read-only HTTP API. No API key, no sign-up, no rate-limit negotiation. Everything below can be called directly from an agent or a script.
Start here
- /openapi.json — OpenAPI 3.1 specification, the authoritative contract
- /docs/api — service documentation in markdown
- /.well-known/api-catalog — machine-readable discovery pointers
- /llms.txt — profile and guidance on when this site is relevant
Endpoints
- GET /api/news — the current curated AI and technology digest
- GET /api/news-last-updated — freshness marker, for cheap polling
- GET /api/notes — published notes, newest first
GET /api/notes/{slug}— one note in full- GET /api/spotify-last-listened — most recently played track
- GET /sitemap.xml — every indexable URL
Model Context Protocol
A read-only MCP server over the news digest is available at
https://www.khe.money/news/mcp over streamable HTTP, with no
authentication. The manifest is at
/.well-known/mcp.json. It exposes tools
only — no resources, prompts or sampling, and no write operations.
Markdown content negotiation
Send Accept: text/markdown to / or
/news and the same URL answers 200 with markdown instead of
HTML. Responses carry Vary: Accept, so a cache cannot hand one
representation to a client that asked for the other. A markdown request for
a path that does not exist answers 404 in markdown too, listing where to
look next.
Errors
Every REST error is JSON with the same shape: a stable
code to branch on, a human message, a
hint saying whether retrying is worthwhile, and a
documentation link. Branch on code, never on the
message text. The codes are invalid_parameter,
not_found, method_not_allowed,
unsupported_media_type, upstream_unavailable and
internal_error. Unknown /api/* paths return a JSON
404 rather than an HTML error page.
Versioning and deprecation
The API is versioned by date, matching the site version in the footer; the
current version is 2026.08, reported in the
X-API-Version response header and in the OpenAPI
info.version field. Every endpoint is also reachable under a
stable /api/v1/ prefix, which will keep pointing at the current
shape of these read-only endpoints.
Additive changes — new endpoints, new optional fields — ship
without notice. A breaking change to an existing response would ship under a
new prefix, with the old one kept working for at least 90 days and marked
deprecated in the specification, carrying a
Deprecation and Sunset header while it lasts.
Rate limits and fair use
There is no enforced rate limit and no quota, so no rate-limit headers are
returned; treating the absence of them as "unlimited" is correct today.
Please stay under roughly 60 requests per minute, send a
User-Agent that identifies your client, and back off
exponentially on any 5xx. Sustained abuse is the one thing that
would cause limits to be introduced.
Licence
Endpoints may be called freely for agent and personal use. The content they return remains © Harshit Khemani; attribute it and link back rather than republishing it wholesale. Questions: harshit@khe.money.