Developer portal
Everything on this page is public, read-only where it is unauthenticated, and needs no key.
Machine-readable index
| Resource | URL |
|---|---|
| OpenAPI 3.1 (JSON) | https://coach.quotavita.com/openapi.json |
| OpenAPI 3.1 (YAML) | https://coach.quotavita.com/api/openapi.yaml |
| Agent instructions | https://coach.quotavita.com/agents.md |
| llms.txt | https://coach.quotavita.com/llms.txt |
| Sitemap | https://coach.quotavita.com/sitemap.xml |
| Health check | https://coach.quotavita.com/api/health |
Quickstart
Ask the Coach what Quota Vita may sell you, and how much milkshake covers a protein gap:
curl -s "https://coach.quotavita.com/api/shop?proteinG=30&days=28&language=en"
Read the contract for every endpoint:
curl -s https://coach.quotavita.com/openapi.json | jq '.paths | keys'
Check the service is up before a batch of calls:
curl -s https://coach.quotavita.com/api/health
Every page on this site is also Markdown. Ask for it by Accept header, per acceptmarkdown.com:
curl -s -H 'Accept: text/markdown' https://coach.quotavita.com/developers
Authentication
The read endpoints — GET /api/health, GET /api/shop, GET /openapi.json — take no credentials and no key. The generative and delivery endpoints (POST /api/coach-chat, POST /api/daily-meals, POST /api/meal-image, POST /api/meal-photo, POST /api/shopify-email) are served for the Coach's own front end; they need no user key either, but they are backed by paid third-party providers and return 503 with a service_not_configured code where a provider is not enabled. Treat them as best-effort, not as a contracted API.
Errors
Every error is JSON, with the same envelope on every route:
{
"error": "Method not allowed.",
"code": "method_not_allowed",
"message": "Method not allowed.",
"hint": "Use one of the methods listed for this path in the OpenAPI document.",
"documentation": "https://coach.quotavita.com/openapi.json",
"status": 405
}
error and message always carry the same human-readable sentence. code is a stable snake_case identifier — branch on that, never on the sentence. hint says what to do next.
Rate limits and fair use
There is no published quota and no key to throttle. Keep it to a few requests a second, cache /api/shop for the hour it advertises in its Cache-Control, and take /openapi.json once rather than on every call. Sustained abusive traffic is blocked at the edge.
Sandbox
There is no separate sandbox host. GET /api/health and GET /api/shop are safe to call repeatedly: they are read-only, they cost nothing and they touch no personal data. Use them to check your integration end to end.