Machine-readable resources
- /openapi.json
OpenAPI 3.1 specification of every public HTTP endpoint on www.durate.com.
- /.well-known/mcp.json
Model Context Protocol server at POST /mcp (Streamable HTTP, no auth). The link is its server card, the discovery manifest.
- /llms.txt
llmstxt.org site index for AI agents: what Durate is, key facts, every page.
- /llms-full.txt
The full content of every durate.com page in one markdown document.
- /sitemap.xml
XML sitemap of every indexable page, with last-modified dates.
- /api
Machine-readable JSON list of the API endpoints.
The durate.com API
The website API is small and fully described in openapi.json: POST /api/contact to message the team, POST /api/discord-webhook for get-started signups, POST /api/mcp for the MCP server, and GET /api/page-markdown behind the markdown content negotiation. Every JSON response reports X-Api-Version: 1; the API is additive-only, and a breaking change would ship under new /api/v2/* paths.
Errors are structured JSON, {"error": {"code", "message", "hint"}}, never an HTML page, including 404s on unknown API paths.
MCP server
durate.com runs a read-only Model Context Protocol server at POST /mcp (Streamable HTTP transport, stateless, no authentication; also reachable at /api/mcp). It speaks protocol revisions 2025-11-25 through 2024-11-05 and exposes four resources: llms.txt, llms-full.txt, openapi.json, and sitemap.xml. The server card at /.well-known/mcp.json describes it without a handshake.
Markdown for agents
Any page in the sitemap can be fetched as markdown instead of HTML: send Accept: text/markdown, or append .md to the URL (for example durate.com/about.md). Unknown paths return a short markdown 404 that points back to the site index rather than an HTML shell, and robots.txt allows AI crawlers and assistants across the site.
Rate limits
API responses are limited to 60 requests per 60 seconds per client and self-report their budget with the IETF RateLimit header fields, in both the structured-field form and the widely deployed legacy trio:
RateLimit-Policy: "default";q=60;w=60 RateLimit: "default";r=59;t=42 RateLimit-Limit: 60 RateLimit-Remaining: 59 RateLimit-Reset: 42
Exceeding the limit returns 429 with a Retry-After header and a structured rate_limited error body. Agents should honor Retry-After rather than retrying immediately.
Frequently asked questions
Does Durate have a public API?
The durate.com website exposes a small public API (a contact endpoint, a get-started signup, and an MCP server), fully described in the OpenAPI 3.1 spec at durate.com/openapi.json. The Durate scheduling product itself does not offer a public API today: product integrations (EHRs like Epic and Oracle Cerner, payroll systems like ADP, calendars, databases) are set up as part of implementation. Email [email protected] to discuss an integration.
Does Durate have an MCP server?
Yes. durate.com runs a read-only Model Context Protocol server at POST durate.com/mcp (Streamable HTTP transport, JSON-RPC 2.0, no authentication, protocol revisions 2025-11-25 through 2024-11-05). It exposes llms.txt, llms-full.txt, openapi.json, and sitemap.xml as resources, and publishes a server card at durate.com/.well-known/mcp.json.
Can AI agents read durate.com?
Yes, by design. robots.txt allows AI crawlers and assistants, llms.txt indexes every page, and any page can be fetched as markdown by sending Accept: text/markdown or appending .md to its URL. API responses carry standard RateLimit headers (60 requests per 60 seconds per client) so agents can self-throttle.