LimeJade API & agent resources
LimeJade developer resources — OpenAPI specification, MCP server, JSON error format, markdown content negotiation, and llms.txt.
This page is the index of LimeJade developer and AI-agent resources. Everything listed here is public, needs no credentials, and lives at a fixed URL.
Machine-readable resources
| Resource | URL | Format |
|---|---|---|
| OpenAPI 3.1 specification | /openapi.json | JSON |
| OpenAPI 3.1 specification | /api/openapi.yaml | YAML |
| MCP server manifest | /.well-known/mcp | JSON |
| MCP Streamable HTTP endpoint | https://www.limejade.com/api/mcp | JSON-RPC 2.0 |
| Agent instructions | /llms.txt | Markdown |
| Pricing | /pricing.md | Markdown |
| Sitemap index | /sitemap.xml | XML |
MCP server
LimeJade ships a read-only Model Context Protocol server over the Streamable HTTP transport. It is stateless — every request is self-contained, and there is no session to establish.
- Endpoint:
POST https://www.limejade.com/api/mcp - Manifest:
GET https://www.limejade.com/.well-known/mcp - Authentication: none
- Protocol versions:
2026-07-28,2025-11-25,2025-06-18,2025-03-26
Add it to an MCP client with:
{
"mcpServers": {
"limejade": {
"type": "http",
"url": "https://www.limejade.com/api/mcp"
}
}
}Tools
| Tool | What it returns |
|---|---|
get_product_overview | Product briefing, best-fit use cases, and canonical URLs. |
get_pricing | Published plan prices for every billing cadence. |
list_doc_pages | Every help documentation page with its path and summary. |
search_docs | Ranked documentation matches with excerpts. |
get_doc_page | Full markdown of one documentation page. |
All tools are read-only. They expose no client data and perform no writes.
HTTP API
The application API is tRPC over HTTP at /api/trpc/*. Public procedures — organization lookup, availability, and booking creation for a salon’s public booking page — are described in the OpenAPI document.
Calling conventions
- Queries are
GETwith aninputquery parameter containing URL-encoded JSON. - Mutations are
POSTwith a JSON body. - Inputs and outputs are wrapped in a superjson envelope:
{"json": …}. - Dates are ISO 8601 strings in UTC; calendar days are
YYYY-MM-DDin the salon’s timezone. - Send an
idempotencyKeyon booking creation so a retry does not double-book.
Error format
Route handlers return a structured JSON error. Match on error.code, which is stable; error.message is human-readable and may change.
{
"error": {
"code": "not_found",
"message": "No API endpoint matches /api/nope.",
"hint": "Fetch https://www.limejade.com/openapi.json for the list of available operations.",
"docs": "https://www.limejade.com/docs/api"
}
}Codes map to HTTP status: bad_request 400, unauthorized 401, forbidden 403, not_found 404, method_not_allowed 405, not_acceptable 406, conflict 409, payload_too_large 413, unsupported_media_type 415, rate_limited 429, internal_error 500, service_unavailable 503.
tRPC endpoints keep their own envelope, with error.data.code carrying the tRPC error code.
Markdown content negotiation
Public pages follow acceptmarkdown.com. Send Accept: text/markdown and the same canonical URL returns markdown instead of HTML:
curl -H "Accept: text/markdown" https://www.limejade.com/pricingResponses carry Vary: Accept, Accept-Encoding, so caches keep the HTML and markdown variants apart. Wildcards (*/*) and browser Accept headers resolve to HTML, so nothing about normal page loads changes. Paths under /api, /dashboard, /auth, /book, and any URL that already has its own format (.json, .md, .txt, .xml) are excluded.
Verifying
curl -s https://www.limejade.com/openapi.json | head
curl -s https://www.limejade.com/.well-known/mcp | head
curl -s -o /dev/null -w "%{http_code}\n" https://www.limejade.com/no-such-page # 404
curl -s -X POST https://www.limejade.com/api/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'