Endure API
Access your training data programmatically. Readiness scores, activities, performance metrics, and more.
Your first API call in 60 seconds
1. Get your API key
Go to Settings → API Keys and create a key with read scope.
2. Check the status
Shell
curl https://endurelabs.app/api/v1/status3. Fetch your readiness
Shell
curl -H "Authorization: Bearer endure_live_your_key_here" \
https://endurelabs.app/api/v1/readiness/currentExample response:
JSON
{
"score": 82,
"recommendation": "go",
"confidence": 0.91,
"factors": {
"ctl": 64.2,
"atl": 58.1,
"tsb": 6.1,
"resting_hr": 48,
"sleep_score": 85
},
"generated_at": "2026-03-11T06:00:00Z"
}SDK
The official TypeScript SDK wraps every endpoint with full type safety.
Install
npm install @endure/sdkTypeScript
import { EndureClient } from '@endure/sdk';
const endure = new EndureClient({
apiKey: 'endure_live_your_key_here',
});
// Get today's readiness
const readiness = await endure.getCurrentReadiness();
console.log(readiness.recommendation); // "go" | "caution" | "rest"
// List recent activities
const { data: activities } = await endure.listActivities({
start: '2026-03-01',
end: '2026-03-11',
});Endpoints
All endpoints are prefixed with /api/v1. Eighteen endpoints across ten resource groups.
Status
GET
/statusAthlete
GET
/athletePATCH
/athleteActivities
GET
/activitiesPOST
/activitiesGET
/activities/{id}PATCH
/activities/{id}GET
/activities/{id}/streamsReadiness
GET
/readiness/currentGET
/readiness/historyPMC
GET
/pmcZones
GET
/zonesPlans
GET
/plansGET
/plans/{id}Workouts
GET
/workoutsGET
/workouts/{id}Integrations
GET
/integrationsExport
POST
/exportGET
/export/{id}Authentication
Include your API key as a Bearer token in the Authorization header of every request.
Authorization: Bearer endure_live_your_key_hereKeys are created in Settings → API Keys. Each key is scoped to control access. Live keys begin with endure_live_ and test keys with endure_test_.
Scopes
| Scope | Description |
|---|---|
| read | Read access to all athlete data |
| write | Create and update activities, athlete profile |
| read:readiness | Read access to readiness scores only |
| read:activities | Read access to activities only |
| read:pmc | Read access to PMC data only |
| write:activities | Create and update activities only |
Rate Limits
Rate limits are applied per API key. Exceeding the limit returns a 429 response with a Retry-After header.
| Tier | Requests/min | Streams/day | Export/hour |
|---|---|---|---|
| Free | 30 | 50 | 1 |
| Premium | 120 | 500 | 1 |
| Pro | 240 | 1,000 | 1 |
Error Handling
All errors return a consistent JSON envelope:
Error envelope
{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Retry after 12 seconds.",
"status": 429
}
}Error codes
| Code | HTTP | Description |
|---|---|---|
| UNAUTHORIZED | 401 | Missing or invalid API key |
| FORBIDDEN | 403 | Key does not have required scope |
| NOT_FOUND | 404 | Resource does not exist or is not owned by you |
| RATE_LIMITED | 429 | Too many requests — back off and retry |
| VALIDATION_ERROR | 422 | Request body or query params failed validation |
| INTERNAL_ERROR | 500 | Unexpected server error — report if persistent |