# ExerciseAPI > Free, public, read-only REST API for a hand-curated, hypertrophy-focused > exercise library: 183 exercises with stimulus-to-fatigue ratings, > research-backed gold-standard flags, e1RM substitution groups, calisthenics > progression chains, curated rep ranges, and coaching cues. Keyless to try (first 100 calls/day free per IP). JSON only. CORS enabled. All endpoints are GET. The /v1 contract is additive-only. Data license: CC BY 4.0 — attribution REQUIRED (ready-to-use credit line in GET /v1/meta, `license.attribution`). ## Endpoints - [GET https://exercise-api.com/v1/exercises](https://exercise-api.com/v1/exercises): list + filter the catalog (see Parameters) - [GET https://exercise-api.com/v1/exercises/{id}](https://exercise-api.com/v1/exercises/barbell_bench_press): one exercise by stable slug - [GET https://exercise-api.com/v1/meta](https://exercise-api.com/v1/meta): controlled vocabularies + counts + dataset_version + license - [GET https://exercise-api.com/health](https://exercise-api.com/health): liveness + dataset size - [GET https://exercise-api.com/openapi.json](https://exercise-api.com/openapi.json): OpenAPI 3.1 spec (canonical machine contract) - POST https://exercise-api.com/v1/suggestions: propose a missing exercise/correction (JSON: type, title, details?, exercise_id?; strict limits) ## Docs - [Documentation](https://exercise-api.com/docs): endpoint reference, field dictionary, examples - [Full API reference for agents](https://exercise-api.com/llms-full.txt): everything in one file - [Interactive API reference](https://exercise-api.com/docs/api): rendered OpenAPI ## Conventions - List envelope: `{ object: "list", data, count, total, limit, offset }` - Error envelope: `{ error: { code, message } }` — stable codes: invalid_parameter, not_found, rate_limited, internal_error - Invalid filter values return 400 with the valid values listed in the message - `X-Dataset-Version` header on every response (dataset semver, currently 1.1.0)