Datos estáticos servidos por GitHub Pages (CDN, HTTPS, CORS abierto). Cada ejercicio incluye nombre en ES/EN, músculos principal/secundario, instrucciones, ilustración masculina y femenina y un mapa muscular SVG. Sin claves, sin límites.
| GET /v1/exercises.json | Índice de todos los ejercicios | probar ↗ |
| GET /v1/exercises/<slug>.json | Ficha completa de un ejercicio | leg-press ↗ |
| GET /v1/muscles.json | Taxonomía de músculos (ES/EN) | probar ↗ |
| GET /v1/by-group/<group>.json | Ejercicios por grupo (legs, chest, back…) | legs ↗ |
| GET /v1/by-muscle/<muscle>.json | Ejercicios por músculo | gluteal ↗ |
| GET /v1/by-equipment/<type>.json | Ejercicios por equipamiento (machine, barbell…) | machine ↗ |
| /images/<slug>-m.jpg | -f.jpg | Ilustración (hombre / mujer) | mujer ↗ |
| /muscle-maps/<slug>.svg | Mapa muscular resaltado | SVG ↗ |
const base = "https://marcmayol.com/exercise-api";
// un ejercicio, en el idioma que quieras
const ex = await fetch(
`${base}/v1/exercises/leg-press.json`
).then(r => r.json());
ex.name.es; // "Prensa de piernas"
ex.name.en; // "Leg press"
ex.primaryMuscles[0].es; // "Cuádriceps"
ex.instructions.es; // [ "Ajusta el asiento…", … ]
ex.images.female; // .../leg-press-f.jpg
{
"slug": "leg-press",
"name": { "es": "Prensa de piernas",
"en": "Leg press" },
"group": { "es": "Piernas", "en": "Legs" },
"primaryMuscles": [
{ "id": "quadriceps",
"es": "Cuádriceps", "en": "Quadriceps" } ],
"instructions": { "es": [ … ], "en": [ … ] },
"images": { "male": "…-m.jpg",
"female": "…-f.jpg" },
"muscleMap": "…/leg-press.svg"
}