---
title: "Developers and agents"
url: "https://www.akshaymaurya.com/developers"
description: "A read-only JSON API over everything on this site, an OpenAPI description of it, and a markdown twin of every page."
---

# Developers and agents

A read-only JSON API over everything on this site, an OpenAPI description of it, and a markdown twin of every page.

Everything this site displays is also available as JSON. The endpoints are static files rebuilt on every deploy, which means there is no authentication, no API key to request, no rate limit and nothing to sign up for. Fetch them the same way you would fetch any other public file. CORS is open, so browser-side calls work too.

Start at https://www.akshaymaurya.com/api/index.json, which lists every endpoint. The machine-readable description of the whole surface is at https://www.akshaymaurya.com/openapi.json, and it is OpenAPI 3.1.

## Endpoints

GET /api/profile.json — identity, location, contact address, and the kinds of work I am open to, plus the kinds I am not.

GET /api/experience.json — public current work, employment history and education, with what was shipped in each role.

GET /api/projects.json — products and open-source packages, with repository links, stacks and metrics, plus the archive of older repositories.

GET /api/writing.json — published essays and articles, each with a link to a markdown version.

GET /api/stack.json — tools and technologies, focus areas, awards and certifications.

## A note on the numbers

In projects.json, capturedAt is the observation date of the saved GitHub stars and pub.dev likes/downloads; builtAt is the generation date. A rebuild does not refresh those metrics or reverify historical product claims. Other collections use capturedAt for content serialization, not independent verification. The website attempts live GitHub and pub.dev requests and falls back to the saved snapshot. For live values, call those APIs directly using the repository and package names in the JSON. pubDevDownloads30d counts package downloads, including CI activity, not unique users; pubDevInstalls30d remains as a deprecated alias with the same value.

## Errors

A request for a resource that does not exist under /api returns HTTP 404 with a JSON body, not an HTML page. The body is an object with an error key containing code, message, a hint about what to do next, and a link to this documentation.

## Markdown and agent access

Every page on this site has a markdown twin. Request any URL with the header Accept: text/markdown and you will get markdown back, with Vary: Accept set so a cache cannot hand you the wrong variant. You can also append /index.md to any path, or add ?mode=agent to a URL, and known AI crawler user-agents are served markdown automatically.

For a condensed briefing rather than the full site, read /llms.txt. It names what I am a good fit for and what I am not, and links to the scoped files for each area. Agent skills are indexed at /.well-known/agent-skills/index.json.
