{"openapi":"3.1.0","info":{"title":"Intervals.icu (BYOK) API","version":"0.1.0","description":"Intervals.icu (BYOK) lets an AI assistant read your own Intervals.icu data through the Intervals.icu API with a key you supply (Intervals.icu API key (Settings, Developer Settings)). Read-only: 4 tools (list_activities, get_activity, list_wellness, list_calendar_events). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-intervalsicu.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-intervalsicu/docs"},"termsOfService":"https://connectorbay.com/byok-intervalsicu/terms"},"servers":[{"url":"https://byok-intervalsicu.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-intervalsicu/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_activities":{"post":{"operationId":"list_activities","summary":"List your activities between two dates (workouts, rides, runs and so on) as stored in Intervals.icu. The answer is retur","description":"List your activities between two dates (workouts, rides, runs and so on) as stored in Intervals.icu. The answer is returned as the provider sends it (no field selection) and is capped at 30 items per call. Reads only the data of the athlete who owns the key. Use for \"What activities did I do in Intervals.icu in the first half of October\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oldest":{"description":"First day to include, as YYYY-MM-DD.","maxLength":10,"title":"Oldest","type":"string"},"newest":{"description":"Last day to include, as YYYY-MM-DD.","maxLength":10,"title":"Newest","type":"string"}},"required":["oldest","newest"],"title":"list_activitiesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_activity":{"post":{"operationId":"get_activity","summary":"Get one of your activities by id, including its interval breakdown. Reads only the data of the athlete who owns the key.","description":"Get one of your activities by id, including its interval breakdown. Reads only the data of the athlete who owns the key. Use for \"Show the intervals of my Intervals.icu activity i12345678\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Activity id as shown by list_activities, for example 'i12345678'.","maxLength":40,"title":"Id","type":"string"},"intervals":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to include the detected intervals.","title":"Intervals"}},"required":["id"],"title":"get_activityArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_wellness":{"post":{"operationId":"list_wellness","summary":"List your daily wellness entries (such as weight, resting heart rate, sleep and mood fields you record) between two date","description":"List your daily wellness entries (such as weight, resting heart rate, sleep and mood fields you record) between two dates. The answer is returned as the provider sends it (no field selection) and is capped at 30 items per call. Reads only the data of the athlete who owns the key. Use for \"What wellness data did I log in Intervals.icu last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oldest":{"description":"First day to include, as YYYY-MM-DD.","maxLength":10,"title":"Oldest","type":"string"},"newest":{"description":"Last day to include, as YYYY-MM-DD.","maxLength":10,"title":"Newest","type":"string"}},"required":["oldest","newest"],"title":"list_wellnessArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_calendar_events":{"post":{"operationId":"list_calendar_events","summary":"List the events on your training calendar (planned workouts, races, notes) between two dates. The answer is returned as ","description":"List the events on your training calendar (planned workouts, races, notes) between two dates. The answer is returned as the provider sends it (no field selection) and is capped at 30 items per call. Reads only the data of the athlete who owns the key. Use for \"What workouts are planned on my Intervals.icu calendar this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oldest":{"description":"First day to include, as YYYY-MM-DD.","maxLength":10,"title":"Oldest","type":"string"},"newest":{"description":"Last day to include, as YYYY-MM-DD.","maxLength":10,"title":"Newest","type":"string"}},"required":["oldest","newest"],"title":"list_calendar_eventsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}