TrainingPeaks · Agentic Access
TrainingPeaks Agentic Access
x-agentic-access
generated
TrainingPeaks exposes 49 API operations that an AI agent could call, of which 15 are state-changing ‘acting’ operations. This is a recommended x-agentic-access execution contract — the scope, audience, consequence tier, short-lived token constraints, and escalation each action should carry before it is handed to an autonomous agent.
By consequence: 34 read and 15 write.
Contracts are classified heuristically from the provider’s OpenAPI and refresh on every APIs.io network build; audience is bound per deployment. The model follows Curity’s Access Intelligence (apidays Munich 2026). Browse every provider’s agent contracts at agentic-access.apis.io.
FitnessEndurance TrainingWorkoutsCoachingSportsHealthWearables
Operations: 49
Acting: 15
Human-in-the-loop: 0
Method: generated
By consequence
read 34
write 15
Source
Agentic Access
generated: '2026-07-15'
method: generated
source: openapi/trainingpeaks-openapi.yml
description: Recommended x-agentic-access execution contracts, classified heuristically from
the OpenAPI. A governance starting point for exposing this API to AI agents — review and bind
audience per deployment. See research/curity/agentic-governance/.
summary:
operations: 49
by_action_class:
connected: 34
acting: 15
by_consequence:
read: 34
write: 15
human_in_the_loop_required: 0
operations:
- path: /v1/info/version
method: get
operationId: getVersion
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/athlete/profile
method: get
operationId: getAthleteProfile
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/athlete/zones
method: get
operationId: getAthleteZones
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/athlete/zones/{zoneType}
method: get
operationId: getAthleteZonesByType
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/coach/profile
method: get
operationId: getCoachProfile
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/coach/athletes
method: get
operationId: getCoachAthletes
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/coach/athletes/zones
method: get
operationId: getCoachAthleteZones
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/coach/athletes/zones/{zoneType}
method: get
operationId: getCoachAthleteZonesByType
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/coach/assistants
method: get
operationId: getCoachAssistants
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/coach/assistants/{assistantId}
method: get
operationId: getCoachAssistant
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/coach/assistants/{assistantId}/athletes
method: get
operationId: getCoachAssistantAthletes
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v3/file
method: post
operationId: uploadFile
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v2/metrics/{metricId}
method: get
operationId: getMetric
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/metrics/{startDate}/{endDate}
method: get
operationId: getMetricsByDateRange
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/metrics/{athleteId}/{startDate}/{endDate}
method: get
operationId: getAthleteMetrics
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/metrics
method: post
operationId: createMetric
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v1/athletes/{athleteId}/nutrition
method: get
operationId: getNutrition
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/athletes/{athleteId}/nutrition
method: post
operationId: createNutrition
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v1/athletes/{athleteId}/nutrition/{nutritionId}
method: put
operationId: updateNutrition
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v1/athletes/{athleteId}/nutrition/{nutritionId}
method: delete
operationId: deleteNutrition
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v2/workouts/{startDate}/{endDate}
method: get
operationId: getWorkouts
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/{athleteId}/{startDate}/{endDate}
method: get
operationId: getAthleteWorkouts
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/changed
method: get
operationId: getChangedWorkouts
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/{athleteId}/changed
method: get
operationId: getChangedWorkoutsForAthlete
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/wod/{date}
method: get
operationId: getWorkoutOfTheDay
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/wod/file/{workoutId}/
method: get
operationId: getWorkoutOfTheDayFile
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/plan
method: post
operationId: createWorkout
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v2/workouts/plan/{id}
method: put
operationId: updateWorkout
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v2/workouts/id/{id}
method: get
operationId: getWorkoutById
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/id/{id}
method: delete
operationId: deleteWorkoutById
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v2/workouts/{athleteId}/id/{id}
method: get
operationId: getAthleteWorkoutById
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/{athleteId}/id/{id}
method: delete
operationId: deleteAthleteWorkoutById
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v2/workouts/id/{id}/meanmaxes
method: get
operationId: getWorkoutMeanMax
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/{athleteId}/id/{id}/meanmaxes
method: get
operationId: getAthleteWorkoutMeanMax
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/id/{id}/timeinzones
method: get
operationId: getWorkoutTimeInZones
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/{athleteId}/id/{id}/timeinzones
method: get
operationId: getAthleteWorkoutTimeInZones
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/id/{id}/details
method: get
operationId: getWorkoutDetails
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/{athleteId}/id/{id}/details
method: get
operationId: getAthleteWorkoutDetails
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/workouts/{athleteId}/id/{workoutId}/comment
method: post
operationId: createWorkoutComment
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v2/athletes/{athleteId}/strength-workouts
method: get
operationId: getStrengthWorkouts
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/events/next
method: get
operationId: getNextEvent
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/events/{date}
method: get
operationId: getEventsByDate
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/events
method: post
operationId: createEvent
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v2/athletes/{athleteId}/routes
method: get
operationId: getRoutes
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v2/athlete/{athleteId}/routes
method: post
operationId: createRoute
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v1/webhook/subscriptions
method: get
operationId: getWebhookSubscriptions
x-agentic-access:
action-class: connected
consequence: read
subject: optional
token:
max-ttl: 3600
audit: none
- path: /v1/webhook/subscriptions
method: post
operationId: createWebhookSubscription
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v1/webhook/subscriptions/{subscriptionId}
method: put
operationId: updateWebhookSubscription
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required
- path: /v1/webhook/subscriptions/{subscriptionId}
method: delete
operationId: deleteWebhookSubscription
x-agentic-access:
action-class: acting
consequence: write
subject: required
audience: null
token:
max-ttl: 900
escalation:
human-in-the-loop: conditional
triggers:
- abnormal
- high-value
audit: required