← Back

Developer & agent portal

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.

Quickstart

curl https://filipjohansen.com/api
curl https://filipjohansen.com/api/about
curl "https://filipjohansen.com/api/projects?category=side"
curl https://filipjohansen.com/openapi.json

JSON API

Base URL https://filipjohansen.com. Every response is JSON, CORS is open to *, and every endpoint is GET.

Errors

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"
  }
}

Other machine-readable surfaces

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