rowan-kendal.com API & Agent Documentation
Machine-readable resources for developers and AI agents
Resources
OpenAPI 3.1 specification — the full public API surface with typed schemas and operation IDs.llms.txt — guidance for AI agents, including when to use this site.sitemap.xml — all indexable URLs with last-modified dates.robots.txt — crawler policy. All major AI crawlers are welcome.
Authentication
The public API requires no authentication. Endpoints are open, rate-limited per client IP, and safe to call from agents and scripts.
Versioning & deprecation
The API is version 1; every /api/* response carries an X-API-Version: 1 header. Endpoints, request shapes, and response fields documented in the OpenAPI spec will not change incompatibly within a version. Before any breaking change, affected endpoints will return Deprecation and Sunset headers (RFC 8594) at least 90 days before removal, and the OpenAPI spec will mark the operation deprecated. New fields may be added at any time; treat unknown response fields as forward-compatible.
MCP server
An MCP (Model Context Protocol) server with Streamable HTTP transport is available at https://www.rowan-kendal.com/api/mcp (alias /mcp). It exposes read-only tools: get_profile, get_about, get_contact, and get_leaderboard. No authentication required.
{
"mcpServers": {
"rowan-kendal": { "url": "https://www.rowan-kendal.com/api/mcp" }
}
}CLI
The official CLI, rowan-kendal-cli (npm), scripts these endpoints without custom integration code:
npx rowan-kendal-cli profile # profile as markdown
npx rowan-kendal-cli contact # contact channels
npx rowan-kendal-cli scores # leaderboard JSON
npx rowan-kendal-cli openapi # OpenAPI 3.1 specErrors
All API error responses are structured JSON — never HTML. Every error carries a human-readable error message, a machine-readable code, and, where useful, a hint describing how to resolve it:
{ "error": "Invalid payload", "code": "invalid_payload",
"hint": "Provide name (string) and score (number 0-10000000)." }Unknown API paths return a JSON 404 with code not_found.Rate limits
Write endpoints return RFC RateLimit headers on every response so clients can self-throttle in real time, and a Retry-After header on HTTP 429:
RateLimit-Policy: 20;w=60
RateLimit-Limit: 20
RateLimit-Remaining: 19
RateLimit-Reset: 42POST /api/pipeline-scores allows 20 requests per minute per IP.Endpoints
GET /api/pipeline-scores — returns the top-10 leaderboard for the Pipeline Defense game.
curl -s https://www.rowan-kendal.com/api/pipeline-scores
# { "scores": [ { "name": "...", "score": 1234, "level": "STARTUP", "date": "2026-08-26" } ] }POST /api/pipeline-scores — submits a score and returns the updated leaderboard.curl -s -X POST https://www.rowan-kendal.com/api/pipeline-scores \
-H 'Content-Type: application/json' \
-d '{ "name": "Ada", "score": 4200, "level": "STARTUP", "date": "2026-08-26" }'Markdown content negotiation
The pages /, /about, /contact, /docs, /privacy, and /testing-phases serve a Markdown variant when requested with Accept: text/markdown (the acceptmarkdown.com convention). Responses include Vary: Accept so caches keep the variants apart.
curl -s -H 'Accept: text/markdown' https://www.rowan-kendal.com/