Everything on this site is readable by machines: a JSON API, an OpenAPI spec, an MCP server, llms.txt and markdown content negotiation. It is read-only and public — no API key, no sign-up and no rate-limit registration. Because nothing here mutates state, the production API doubles as the sandbox.
curl https://filipjohansen.com/api
curl https://filipjohansen.com/api/about
curl "https://filipjohansen.com/api/projects?category=side"
curl https://filipjohansen.com/openapi.jsonBase URL https://filipjohansen.com. Every response is JSON, CORS is open to *, and every endpoint is GET.
Failures are always structured JSON, never an HTML page. code is stable and safe
to branch on: not_found, method_not_allowed, invalid_parameter.
{
"error": {
"status": 404,
"code": "not_found",
"message": "No API endpoint matches /api/nope.",
"hint": "List the available endpoints at https://filipjohansen.com/api ...",
"documentation_url": "https://filipjohansen.com/developers"
}
}Pages also negotiate content: send Accept: text/markdown to /, /utvikler, /developers or /article/ruter to get markdown instead of HTML. Unknown paths return a real
HTTP 404 with a markdown body pointing back here.
Questions, or something you want added? hello@filipjohansen.com