← Back

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 spec

Errors

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/