{"openapi":"3.1.0","info":{"title":"Monogram public HTTP API","version":"1.0.0","description":"Read-only discovery and content endpoints for monogram.io (marketing site; not a general application API). This is version 1 of the surface: endpoint URLs are stable, and breaking changes ship under a new /api/v2/ path rather than mutating these. Deprecations are announced at least 90 days in advance via the Deprecation and Sunset response headers (RFC 8594). Every endpoint returns RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, and RateLimit-Policy headers, and responds 429 with a Retry-After header when the limit is exceeded. No authentication is required: every endpoint is public and read-only, so there is no API key to obtain and no sandbox environment to request. The RateLimit headers are advisory and are not enforced as a quota today."},"servers":[{"url":"https://monogram.io"}],"security":[],"paths":{"/api/v1/health":{"get":{"operationId":"getHealth","summary":"Health check","description":"Liveness check for the public site. /api/health remains available as an unversioned alias of this endpoint.","responses":{"200":{"description":"OK","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"service":{"type":"string","example":"monogram.io"}}}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/llms.txt":{"get":{"operationId":"getLlmsText","summary":"LLM-oriented site overview","description":"Plain-text summary of Monogram, when to use it, and a site index for agents.","responses":{"200":{"description":"Plain text","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/llms-full.txt":{"get":{"operationId":"getLlmsFullText","summary":"Full site content export for LLMs","description":"Plain-text export of the full content of every page indexed in /llms.txt.","responses":{"200":{"description":"Plain text","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"text/plain":{"schema":{"type":"string"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/sitemap.md":{"get":{"operationId":"getMarkdownSitemap","summary":"Markdown sitemap","description":"Markdown-formatted sitemap of public pages.","responses":{"200":{"description":"Markdown","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"text/markdown":{"schema":{"type":"string"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/.well-known/api-catalog":{"get":{"operationId":"getApiCatalog","summary":"RFC 9727 API catalog (linkset)","description":"RFC 9727 linkset describing the public HTTP surfaces available on this site.","responses":{"200":{"description":"Linkset JSON","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimitReset"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"}},"content":{"application/linkset+json":{"schema":{"type":"object"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"schemas":{"Problem":{"type":"object","description":"RFC 9457 problem details object returned for error responses.","properties":{"type":{"type":"string","format":"uri-reference","description":"A URI reference identifying the problem type."},"title":{"type":"string","description":"A short, human-readable summary of the problem type."},"status":{"type":"integer","description":"The HTTP status code for this occurrence of the problem."},"detail":{"type":"string","description":"A human-readable explanation specific to this occurrence of the problem."},"instance":{"type":"string","description":"A URI reference identifying the specific occurrence of the problem."},"hint":{"type":"string","description":"A suggestion for recovering from the problem, such as a link to related documentation."}}}},"responses":{"NotFound":{"description":"The requested resource does not exist.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"TooManyRequests":{"description":"The rate limit has been exceeded.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"InternalError":{"description":"An unexpected error occurred on the server.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"headers":{"RateLimitLimit":{"description":"The request quota allowed in the current rate-limit window.","schema":{"type":"string","example":"1000"}},"RateLimitRemaining":{"description":"The requests remaining in the current rate-limit window.","schema":{"type":"string","example":"999"}},"RateLimitReset":{"description":"Seconds until the current rate-limit window resets.","schema":{"type":"string","example":"3600"}},"RateLimitPolicy":{"description":"The rate-limit policy in IETF RateLimit-Policy syntax (limit;w=window).","schema":{"type":"string","example":"1000;w=3600"}}}}}