{"_id":"@caarlos0/hevy","_rev":"7-baf7b657f8b9097b0f15be0a59145bcc","name":"@caarlos0/hevy","dist-tags":{"latest":"0.2.3"},"versions":{"0.0.0":{"name":"@caarlos0/hevy","version":"0.0.0","author":{"name":"Carlos Alexandro Becker"},"license":"MIT","_id":"@caarlos0/hevy@0.0.0","maintainers":[{"name":"caarlos0","email":"caarlos0@gmail.com"}],"bin":{"hevy":"dist/index.cjs"},"dist":{"shasum":"9589174eb1be2ac7f2550d663c272982ee7a97dd","tarball":"https://registry.npmjs.org/@caarlos0/hevy/-/hevy-0.0.0.tgz","fileCount":3,"integrity":"sha512-k4pewkOFQrZ8cDkLAUJzM8F/ioY19G4WohOchQBhDFso4xhfCu4T3knHgkWFSaobnVNMUe44+jMQGJkwoUMJRQ==","signatures":[{"sig":"MEUCIQD9kd3iUXWiSGFMWHNbVioDAXcmJkDD/OClF3LG4wKZsQIgZg/MepmnKYxmo/yRmXgDB9ZJHHzPQenNWOCrot754KA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142850},"type":"module","engines":{"node":">=20"},"gitHead":"b44a40500838e9e3f75f03efc4b6ff2e153c3c62","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"caarlos0","email":"caarlos0@gmail.com"},"_npmVersion":"11.12.1","description":"CLI for managing Hevy routines via the public Hevy API","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^12.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.0","tsup":"^8.2.0","eslint":"^9.0.0","vitest":"^2.0.0","prettier":"^3.3.0","typescript":"^5.5.0","@types/node":"^20.14.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hevy_0.0.0_1777662338721_0.8214707783221422","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@caarlos0/hevy","version":"0.1.1","author":{"name":"Carlos Alexandro Becker"},"license":"MIT","_id":"@caarlos0/hevy@0.1.1","maintainers":[{"name":"caarlos0","email":"caarlos0@gmail.com"}],"bin":{"hevy":"lib/index.cjs"},"dist":{"shasum":"0ad5681d35e02e2a6cf4db1af6beac161950abc2","tarball":"https://registry.npmjs.org/@caarlos0/hevy/-/hevy-0.1.1.tgz","fileCount":7,"integrity":"sha512-qARac4CF76FDNBB/f0Va2eVvtChvQ8lzZpzjpN5U/Eu4YHTXH6cdEDeEvXHdGwLxERrnmaoVoEZfFatrhJrD7w==","signatures":[{"sig":"MEYCIQDTFvFbhxX9QaE+GEnDGYP6/xGQDvo8lMa+JIEPxpGBHwIhAIPhKW6EYYtcltIP0Qyb6R83hBr5KGQsKTKnZMt/qAV4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146939},"type":"module","engines":{"node":">=25.5 <26"},"gitHead":"eea2c2bc182b684c4a6227c1e23ad38b2ae8589a","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","release":"./scripts/bump.sh","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"caarlos0","email":"caarlos0@gmail.com"},"_npmVersion":"11.12.1","description":"CLI for managing Hevy routines via the public Hevy API","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^14.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.0","tsup":"^8.2.0","eslint":"^10.3.0","vitest":"^4.1.5","prettier":"^3.3.0","typescript":"^6.0.3","@types/node":"^25.6.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hevy_0.1.1_1777915169307_0.8603880422774883","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@caarlos0/hevy","version":"0.1.3","keywords":["hevy","workout","routine","fitness","exercise"],"author":{"name":"Carlos Alexandro Becker"},"license":"MIT","_id":"@caarlos0/hevy@0.1.3","maintainers":[{"name":"caarlos0","email":"caarlos0@gmail.com"}],"homepage":"https://github.com/caarlos0/hevy","bugs":{"url":"https://github.com/caarlos0/hevy/issues"},"bin":{"hevy":"lib/index.cjs"},"dist":{"shasum":"b93ee1a47152341d17df475eb8918ce7709152eb","tarball":"https://registry.npmjs.org/@caarlos0/hevy/-/hevy-0.1.3.tgz","fileCount":7,"integrity":"sha512-llcSTo9GXhUMbpc0t1xKshWwGon7EwdpyNPOgBpTHMI3FyYu5IqcrwvixVXKn2G3GtcypGYpPVeetPoW1jkF6Q==","signatures":[{"sig":"MEUCIQC5EDTJ2ihHRXAQY9YPZ2JpGj9pD1wTr2Qi0xViV79OcgIgKX7xeGkiwcslxUE6EIWKolLmHVwhTNfNSOwzFB4IePc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@caarlos0%2fhevy@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":163519},"type":"module","engines":{"node":">=25.5 <26"},"gitHead":"ec0782f262bf6a3ef67c2b2320109fafb713486b","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","release":"./scripts/bump.sh","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dd1f5b1e-e784-4f2e-b9ed-dad4e754cfcb"}},"repository":{"url":"git+https://github.com/caarlos0/hevy.git","type":"git"},"_npmVersion":"11.12.1","description":"CLI for managing Hevy routines via the public Hevy API","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^14.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.0","tsup":"^8.2.0","eslint":"^10.3.0","vitest":"^4.1.5","prettier":"^3.3.0","typescript":"^6.0.3","@types/node":"^25.6.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hevy_0.1.3_1777915602533_0.1856487572097496","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@caarlos0/hevy","version":"0.2.0","keywords":["hevy","workout","routine","fitness","exercise"],"author":{"name":"Carlos Alexandro Becker"},"license":"MIT","_id":"@caarlos0/hevy@0.2.0","maintainers":[{"name":"caarlos0","email":"caarlos0@gmail.com"}],"homepage":"https://github.com/caarlos0/hevy","bugs":{"url":"https://github.com/caarlos0/hevy/issues"},"bin":{"hevy":"lib/index.cjs"},"dist":{"shasum":"024c9f10ede613a12c197088079c3af34661659d","tarball":"https://registry.npmjs.org/@caarlos0/hevy/-/hevy-0.2.0.tgz","fileCount":7,"integrity":"sha512-K7qfiY6P5tNlEIHB2UfAZifW+qYBtFuWhL1t8WS8F7umeUiay6NkbXeBCWJef/sILPDb7bnMv1yjlE4OkbOmCw==","signatures":[{"sig":"MEYCIQDsU0sDvwIkyQmTnh/YfjNFfaby8p0nVDtZNMcs9vmneAIhAJ6cGsY0v986iVVwxUHRyqV2rVP28TM4C6JNHAv7lwhG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173194},"type":"module","engines":{"node":">=25.5 <26"},"gitHead":"889fcf3a2df79ce85abe8c8f53f551c38f883364","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","release":"./scripts/bump.sh","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"caarlos0","email":"caarlos0@gmail.com"},"repository":{"url":"git+https://github.com/caarlos0/hevy.git","type":"git"},"_npmVersion":"11.17.0","description":"CLI for managing Hevy routines via the public Hevy API","directories":{},"_nodeVersion":"26.4.0","dependencies":{"commander":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.0","tsup":"^8.2.0","eslint":"^10.3.0","vitest":"^4.1.5","prettier":"^3.3.0","typescript":"^6.0.3","@types/node":"^26.0.1","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hevy_0.2.0_1783024403032_0.19139720146953","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@caarlos0/hevy","version":"0.2.1","keywords":["hevy","workout","routine","fitness","exercise"],"author":{"name":"Carlos Alexandro Becker"},"license":"MIT","_id":"@caarlos0/hevy@0.2.1","maintainers":[{"name":"caarlos0","email":"caarlos0@gmail.com"}],"homepage":"https://github.com/caarlos0/hevy","bugs":{"url":"https://github.com/caarlos0/hevy/issues"},"bin":{"hevy":"lib/index.cjs"},"dist":{"shasum":"7cbcb7e38df3883afc6b7b9afcdcaf7ae638ec86","tarball":"https://registry.npmjs.org/@caarlos0/hevy/-/hevy-0.2.1.tgz","fileCount":7,"integrity":"sha512-1BtMP4ZKsWNEW4CZI4xFEyuqGSKk2iWb+G8okDBsvCrwRER7LTY6x8IRw+IlncQDIMTV7p46Q0aX48YwdzNNwQ==","signatures":[{"sig":"MEQCIDHzyng6Rur+Q6UpK9VdqTUk4h33o9HDIHNl2ThyntvwAiBkCAIwLJNGZZpwBiJ9lpqia6QUFH6eUIzUrPzMRxEprw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@caarlos0%2fhevy@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":158103},"type":"module","engines":{"node":">=25.5 <26"},"gitHead":"7cd61f6f161ef8e9812f49915a23881b661b40a4","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","release":"./scripts/bump.sh","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dd1f5b1e-e784-4f2e-b9ed-dad4e754cfcb"}},"repository":{"url":"git+https://github.com/caarlos0/hevy.git","type":"git"},"_npmVersion":"11.12.1","description":"CLI for managing Hevy routines via the public Hevy API","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.0","tsup":"^8.2.0","eslint":"^10.3.0","vitest":"^4.1.5","prettier":"^3.3.0","typescript":"^6.0.3","@types/node":"^26.0.1","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hevy_0.2.1_1783024498426_0.8965375993034241","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@caarlos0/hevy","version":"0.2.2","keywords":["hevy","workout","routine","fitness","exercise"],"author":{"name":"Carlos Alexandro Becker"},"license":"MIT","_id":"@caarlos0/hevy@0.2.2","maintainers":[{"name":"caarlos0","email":"caarlos0@gmail.com"}],"homepage":"https://github.com/caarlos0/hevy","bugs":{"url":"https://github.com/caarlos0/hevy/issues"},"bin":{"hevy":"lib/index.cjs"},"dist":{"shasum":"5f7bb6400d4834e46d072619c4682b894ab0d7b2","tarball":"https://registry.npmjs.org/@caarlos0/hevy/-/hevy-0.2.2.tgz","fileCount":7,"integrity":"sha512-vLiWXG7xFElzfJxecJDaPHWBgvuo05WHllVazg2pg8eX9Ixgb91T/7Ckzlae8aMc7drUDiRUhOk9TNRNWyMpKw==","signatures":[{"sig":"MEUCIFwQslvzi64uUwlyOd2Ykrml6a3ejyAoxNUAcOjhRQYTAiEAn+QNJFyjMKn+VQhA23Y2dUVtHtQr6XhD+x3RfnhzcTw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@caarlos0%2fhevy@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":158103},"type":"module","engines":{"node":">=25.5 <26"},"gitHead":"9d942c6cf4b6f7a3deb5ec780e94a194c1f37270","scripts":{"dev":"tsx src/index.ts","lint":"eslint .","test":"vitest run","build":"tsup","format":"prettier --write .","release":"./scripts/bump.sh","test:watch":"vitest","prepublishOnly":"npm run lint && npm test && npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dd1f5b1e-e784-4f2e-b9ed-dad4e754cfcb"}},"repository":{"url":"git+https://github.com/caarlos0/hevy.git","type":"git"},"_npmVersion":"11.12.1","description":"CLI for managing Hevy routines via the public Hevy API","directories":{},"_nodeVersion":"25.9.0","dependencies":{"commander":"^15.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.16.0","tsup":"^8.2.0","eslint":"^10.3.0","vitest":"^4.1.5","prettier":"^3.3.0","typescript":"^6.0.3","@types/node":"^26.0.1","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hevy_0.2.2_1783025167948_0.32131419927148985","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@caarlos0/hevy","publishConfig":{"access":"public"},"version":"0.2.3","description":"CLI for managing Hevy routines via the public Hevy API","type":"module","bin":{"hevy":"lib/index.cjs"},"engines":{"node":">=25.5 <26"},"scripts":{"build":"tsup","dev":"tsx src/index.ts","test":"vitest run","test:watch":"vitest","lint":"eslint .","format":"prettier --write .","prepublishOnly":"npm run lint && npm test && npm run build","release":"./scripts/bump.sh"},"repository":{"type":"git","url":"git+https://github.com/caarlos0/hevy.git"},"bugs":{"url":"https://github.com/caarlos0/hevy/issues"},"homepage":"https://github.com/caarlos0/hevy","keywords":["hevy","workout","routine","fitness","exercise"],"dependencies":{"commander":"^15.0.0"},"devDependencies":{"@types/node":"^26.0.1","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","eslint":"^10.3.0","prettier":"^3.3.0","tsup":"^8.2.0","tsx":"^4.16.0","typescript":"^6.0.3","vitest":"^4.1.5"},"license":"MIT","author":{"name":"Carlos Alexandro Becker"},"gitHead":"c3810c7dd539b46f1f4e697c9b8d1cc2ec826329","_id":"@caarlos0/hevy@0.2.3","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-gHGRVezSrbaSIxQf2RDckaqGBy9qIBfkbXO7JpXSRQyDh7aONpDKY1gL6RnfDOY1ORvnnv8aDSssJbJjtSi7oQ==","shasum":"bb6d4949e46fab278b5ba96ae7652bada44ca694","tarball":"https://registry.npmjs.org/@caarlos0/hevy/-/hevy-0.2.3.tgz","fileCount":7,"unpackedSize":158871,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@caarlos0%2fhevy@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDK5AGOyztj5PewWSKH6eG/9u1eqWWTfTcYaWMziTMAkgIhAKGpPUUQbIo/8kzeJJ1a7OCeaDTq+hBJ+vLouXVkqPs4"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:dd1f5b1e-e784-4f2e-b9ed-dad4e754cfcb"}},"directories":{},"maintainers":[{"name":"caarlos0","email":"caarlos0@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hevy_0.2.3_1788616693525_0.10797481941972631"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-01T19:05:38.632Z","modified":"2026-09-05T13:58:13.949Z","0.0.0":"2026-05-01T19:05:38.915Z","0.1.1":"2026-05-04T17:19:29.432Z","0.1.3":"2026-05-04T17:26:42.666Z","0.2.0":"2026-07-02T20:33:23.169Z","0.2.1":"2026-07-02T20:34:58.574Z","0.2.2":"2026-07-02T20:46:08.069Z","0.2.3":"2026-09-05T13:58:13.666Z"},"bugs":{"url":"https://github.com/caarlos0/hevy/issues"},"author":{"name":"Carlos Alexandro Becker"},"license":"MIT","homepage":"https://github.com/caarlos0/hevy","keywords":["hevy","workout","routine","fitness","exercise"],"repository":{"type":"git","url":"git+https://github.com/caarlos0/hevy.git"},"description":"CLI for managing Hevy routines via the public Hevy API","maintainers":[{"name":"caarlos0","email":"caarlos0@gmail.com"}],"readme":"# hevy\n\nCLI for the [Hevy API](https://api.hevyapp.com/docs/).\n\n## Install\n\nnpm:\n\n```sh\nnpm install -g @caarlos0/hevy\n```\n\nOr run without installing via npx:\n\n```sh\nnpx @caarlos0/hevy --help\n```\n\nPrebuilt binaries for macOS, Linux, and Windows are also available on the\n[releases page](https://github.com/caarlos0/hevy/releases).\n\nGet an API key from <https://hevy.com/settings?api>:\n\n```sh\nexport HEVY_API_KEY=...\n```\n\n`hevy --help` and `hevy --version` work without an API key. API commands\nrequire `HEVY_API_KEY`.\n\n## Commands\n\n```sh\nhevy whoami\n\nhevy routines     list | get <id> | create --file f.json | edit <id> [--file f.json]\nhevy folders      list | get <id> | create <title...>\nhevy workouts     list | get <id> | create --file f.json | edit <id> [--file f.json]\nhevy workouts     count | events [--since <iso>]\nhevy exercises    list | get <id> | history <id> [--start <iso>] [--end <iso>]\nhevy exercises    create --title T --type weight_reps --equipment dumbbell --muscle quadriceps\nhevy measurements list | get <date> | create --file f.json | edit <date> [--file f.json]\n```\n\nCommon flags: `--page N`, `--page-size N`, `--json` (raw API response).\n\n## Machine-readable usage\n\nUse `--json` for scripts and agents. Human-readable output is for terminals;\nJSON output is the raw API response printed to stdout.\n\nCreate and edit commands read a JSON object directly, not an API envelope:\n\n```sh\nhevy workouts create --file examples/workout.json --json\nhevy routines edit r1 --file examples/routine.json --json\nhevy measurements create --file examples/measurement.json --json\n```\n\nUse `--file -` for stdin:\n\n```sh\nhevy workouts get w1 --json \\\n  | jq '.title = \"renamed\"' \\\n  | hevy workouts edit w1 --file - --json\n```\n\nIf `--file` is omitted, create commands read piped stdin. They fail instead of\nwaiting when stdin is a TTY:\n\n```sh\njq '.title = \"copy\"' examples/routine.json | hevy routines create --json\n```\n\nFor routines and workouts, the CLI wraps the object for the API and strips\nserver-managed fields (`id`, `created_at`, `updated_at`) before creating or\nediting. Measurements are sent as the object itself; measurement edits strip\n`date` from the PUT body because the date is part of the URL.\n\nErrors are written to stderr and return a non-zero exit code.\n\n`exercises list` paginates server-side; pipe through `grep` to filter:\n\n```sh\nhevy exercises list --page-size 100 | grep -i squat\n```\n\n`edit` without `--file` opens `$VISUAL` (falling back to `$EDITOR`, then `vi`).\n`--file -` reads stdin, so you can round-trip:\n\n```sh\nhevy routines get r1 --json | jq '.title=\"renamed\"' | hevy routines edit r1 --file -\n```\n\n## Dry-run validation\n\nAll `create` and `edit` commands accept `--dry-run` to validate a JSON payload\nstructurally without creating or updating anything. Validation is local: required\nfields, types, and (where applicable) `YYYY-MM-DD` date format are checked.\nOutput respects `--json`. On failure, exit code is `1`.\n\n```sh\nhevy workouts create --file workout.json --dry-run\nhevy routines edit r1 --file routine.json --dry-run --json\ncat measurement.json | hevy measurements create --file - --dry-run\n```\n\nFor `edit --dry-run --file …`, the remote `GET` is skipped entirely — the file\nis treated as the complete payload. Without `--file`, `edit --dry-run` fetches\nthe current resource, applies your edits, then validates the merged result.\n\n## Creating a workout\n\n`hevy workouts create --file workout.json` expects the workout object\ndirectly (the CLI wraps it in `{ \"workout\": ... }` for the API):\n\n```json\n{\n  \"title\": \"Friday Leg Day 🔥\",\n  \"description\": \"Quads focus\",\n  \"start_time\": \"2024-08-14T12:00:00Z\",\n  \"end_time\": \"2024-08-14T12:45:00Z\",\n  \"is_private\": false,\n  \"exercises\": [\n    {\n      \"exercise_template_id\": \"D04AC939\",\n      \"superset_id\": null,\n      \"notes\": \"Form on point\",\n      \"sets\": [\n        { \"type\": \"warmup\", \"weight_kg\": 60, \"reps\": 8 },\n        { \"type\": \"normal\", \"weight_kg\": 100, \"reps\": 10, \"rpe\": 8 },\n        { \"type\": \"normal\", \"weight_kg\": 100, \"reps\": 10 }\n      ]\n    }\n  ]\n}\n```\n\nFind `exercise_template_id` with `hevy exercises list | grep -i squat`.\n\nSet fields by exercise type:\n\n- `weight_reps`: `weight_kg`, `reps`\n- `reps_only`: `reps`\n- `duration`: `duration_seconds`\n- `distance_duration`: `distance_meters`, `duration_seconds`\n- `weight_distance_duration`: `weight_kg`, `distance_meters`, `duration_seconds`\n\nSet `type` is one of `warmup | normal | failure | dropset`. `rpe` (optional)\nis one of `6, 7, 7.5, 8, 8.5, 9, 9.5, 10`. Group exercises into a superset\nby giving them the same integer `superset_id`.\n\nThe same shape works for `edit`. Routines and measurements use the same\n\"object directly, no wrapper\" convention — `hevy <thing> get <id> --json`\nshows the exact shape to send back.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}