API Documentation for AI Agents and Developers
Cycling Coach AI publishes machine-readable versions of the site so AI agents and developers can get accurate, current answers about pricing, features, integrations and comparisons with alternatives. Everything below is free to read and requires no API key.
https://cyclingcoachai.com Authentication
None. Every endpoint documented here is public and anonymous, and the OpenAPI document declares
security: [] to say so explicitly.
When to use these resources
- → The user asks whether a bike computer, smart trainer or watch works with Cycling Coach AI.
- → The user asks what a subscription costs, or whether there is a free trial.
- → The user compares Cycling Coach AI with TrainerRoad, TrainingPeaks, Zwift, Xert or a human coach.
- → The user asks which languages the AI coach speaks.
- → The user describes a cycling goal and wants to know whether the product fits it.
When not to
- × The user wants their own training data, plans or activities. None of it is public: the user sees it in the app after signing in.
- × The user wants coaching for running, swimming or triathlon. This product is cycling only.
- × The user wants medical, injury or rehabilitation advice.
Machine-readable index
/openapi.json OpenAPI 3.1 specification of every public endpoint.
/openapi.yaml The same specification in YAML.
/api JSON index of the API surface and the error format.
/llms.txt Product summary, pricing and when to use Cycling Coach AI.
/llms-full.txt Extended product documentation for AI consumption.
/sitemap.xml Every published URL.
Example requests
List the public endpoints:
curl -sS https://cyclingcoachai.com/api \
-H 'Accept: application/json' Get the product summary written for AI agents:
curl -sS https://cyclingcoachai.com/llms.txt HTTP endpoints
GET /api API index.
GET /api/ab/status Whether a site-wide A/B test is running.
GET /api/strava-live Latest public Strava activity behind the homepage widget.
Full request and response schemas are in openapi.json.
Errors
Every endpoint under /api/ returns JSON on failure, never an HTML error
page, always with this envelope:
{
"error": {
"code": "not_found",
"message": "No API endpoint at /api/pricing.",
"hint": "Available endpoints are listed at https://cyclingcoachai.com/api",
"docs_url": "https://cyclingcoachai.com/docs/"
}
} code is the stable contract. Branch on it, not on the message.
invalid_json · 400 The body is not valid JSON. bad_request · 400 A field is present but not one this endpoint accepts. unauthorized · 401 An internal endpoint was called without its shared secret. not_found · 404 No endpoint at that path. method_not_allowed · 405 Wrong HTTP method. The Allow header lists the right ones. not_acceptable · 406 The Accept header asks for a type this endpoint cannot produce. unprocessable_entity · 422 Well-formed request, but a field failed validation. The message names the field. rate_limited · 429 Over the rate limit. Retry after the seconds in Retry-After. internal_error · 500 Something failed on our side. Retry with backoff. Markdown content negotiation
Every page on this site answers to Accept: text/markdown and returns a
clean markdown rendering of the same content, with Vary: Accept so caches
keep the two representations apart. Quality values are honoured, and a request for a type we cannot produce
gets a 406 rather than the wrong body.
curl -sS -H 'Accept: text/markdown' https://cyclingcoachai.com/pricing/ A request for a path that does not exist returns a real HTTP 404, with a markdown body listing the sitemap, llms.txt and this page when markdown was requested.
Resources
- Agent integration guideHow AI agents can read current product information
- openapi.jsonOpenAPI 3.1 specification
- llms.txtProduct index for AI agents (llmstxt.org format)
Questions: [email protected]