← Lee Sugano Digital Solutions

Developer and agent documentation

Public API, OpenAPI specification, Markdown content negotiation and MCP server for Lee Sugano Digital Solutions.

This page describes everything leesugano.com exposes for programmatic use: the public content API, the OpenAPI specification that describes it, the Markdown representation of every page, and the MCP server.

None of it requires an API key or a signup. The endpoints are public, rate limited per IP, and every response - errors included - is JSON.

Quick start

Three calls cover most cases: read the specification, list published posts, and read any page of the site as Markdown.

# OpenAPI
curl -s https://leesugano.com/openapi.json

# listPublishedPosts
curl -s "https://leesugano.com/api/posts?limit=5&locale=en"

# Markdown
curl -s -H "Accept: text/markdown" https://leesugano.com/blog

Public endpoints

Every endpoint below accepts anonymous requests. Full request and response schemas live in the OpenAPI specification.

MethodPathoperationIdWhat it does
GET/api/postslistPublishedPostsList published blog posts
GET/api/categorieslistCategoriesList blog categories
GET/api/tagslistTagsList blog tags
GET/api/posts/{id}/reactionsgetPostReactionsRead a post's reactions
POST/api/posts/{id}/reactionsreactToPostAdd, switch or remove a reaction
POST/api/newslettersubscribeToNewsletterSubscribe an email to the newsletter
POST/api/start/recommendrecommendSolutionRecommend a solution from a business profile
GET/api/ogrenderOpenGraphImageRender a 1200x630 Open Graph image

openapi.json · openapi.yaml

Markdown at the same URL

Every public page is served as HTML to browsers and as Markdown to agents, from the same URL, decided by the Accept header per the acceptmarkdown.com convention.

Responses carry Vary: Accept, so CDNs cache the two representations separately. If you prefer an explicit URL, append .md to the path.

curl -sI -H "Accept: text/markdown" https://leesugano.com/blog
curl -s https://leesugano.com/blog.md

Error format

Errors are never HTML. Every failure returns a JSON object with the fields below and the matching HTTP status.

Branch on code, which is stable, rather than on the error text, which may change.

FieldMeaning
errorHuman-readable message. May change without notice.
codeStable SCREAMING_SNAKE_CASE code. Use this in your logic.
requestIdRequest identifier, also returned in the x-request-id header.
detailsValidation details. Present only in development.

Rate limits

The 7 public endpoints are rate limited per IP over a 60-second window.

Every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset. When the limit is exceeded the response is a 429 with Retry-After in seconds. Self-throttle on those headers instead of retrying in a loop.

EndpointLimit
GET /api/posts60 req/min per IP / 60s
GET /api/categories60 req/min per IP / 60s
GET /api/tags60 req/min per IP / 60s
GET /api/posts/{id}/reactions60 req/min per IP / 60s
POST /api/posts/{id}/reactions20 req/min per IP / 60s
POST /api/newsletter10 req/min per IP / 60s
POST /api/start/recommend8 req/min per IP / 60s

MCP server

A Model Context Protocol server runs at https://mcp.leesugano.com over Streamable HTTP transport.

It is OAuth-protected: the tool listing becomes available after authorization, not anonymously.

For AI agents

Operating instructions - which jobs this agency is right for, which it is not, and the exact call that serves each intent - live at /agents.md.

Canonical facts about the company are at /llms.txt, and in expanded form at /llms-full.txt.

Machine-readable resources

Stable files, cached and CORS-enabled.