ENDURE
DocsAPI ReferenceOpenAPI

Endure API

Access your training data programmatically. Readiness scores, activities, performance metrics, and more.

Get your API keyOpenAPI Spec

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/status

3. Fetch your readiness

Shell
curl -H "Authorization: Bearer endure_live_your_key_here" \
  https://endurelabs.app/api/v1/readiness/current

Example 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/sdk
TypeScript
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/statusnoneHealth check and API version

Athlete

GET/athletereadGet athlete profile and settings
PATCH/athletewriteUpdate athlete profile fields

Activities

GET/activitiesreadList activities with pagination and filters
POST/activitieswriteCreate a new activity
GET/activities/{id}readGet a single activity by ID
PATCH/activities/{id}writeUpdate an existing activity
GET/activities/{id}/streamsreadGet time-series data streams for an activity

Readiness

GET/readiness/currentreadToday's readiness score and recommendation
GET/readiness/historyreadHistorical readiness scores over a date range

PMC

GET/pmcreadPerformance Management Chart (Fitness, Fatigue, Form)

Zones

GET/zonesreadTraining zones (power, heart rate, pace)

Plans

GET/plansreadList training plans
GET/plans/{id}readGet a training plan by ID

Workouts

GET/workoutsreadList workouts
GET/workouts/{id}readGet a workout by ID

Integrations

GET/integrationsreadList connected third-party integrations

Export

POST/exportreadRequest a bulk data export
GET/export/{id}readCheck export status and download URL

Authentication

Include your API key as a Bearer token in the Authorization header of every request.

Authorization: Bearer endure_live_your_key_here

Keys 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

ScopeDescription
readRead access to all athlete data
writeCreate and update activities, athlete profile
read:readinessRead access to readiness scores only
read:activitiesRead access to activities only
read:pmcRead access to PMC data only
write:activitiesCreate 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.

TierRequests/minStreams/dayExport/hour
Free30501
Premium1205001
Pro2401,0001

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

CodeHTTPDescription
UNAUTHORIZED401Missing or invalid API key
FORBIDDEN403Key does not have required scope
NOT_FOUND404Resource does not exist or is not owned by you
RATE_LIMITED429Too many requests — back off and retry
VALIDATION_ERROR422Request body or query params failed validation
INTERNAL_ERROR500Unexpected server error — report if persistent
Full API ReferenceOpenAPI SpecSDK on GitHub

Built by Endure Labs. Questions? Reach out at developers@endurelabs.app