Sync your own workout data from your "Strong" app
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #18 from tolik518/strong-api-lib-coverage-100

authored by

Anatolij Vasilev and committed by
GitHub
15cb09c0 535e7c97

+17382 -145
+143 -64
Cargo.lock
··· 3 3 version = 4 4 4 5 5 [[package]] 6 - name = "addr2line" 7 - version = "0.24.2" 6 + name = "aho-corasick" 7 + version = "1.1.4" 8 8 source = "registry+https://github.com/rust-lang/crates.io-index" 9 - checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 9 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 10 10 dependencies = [ 11 - "gimli", 11 + "memchr", 12 12 ] 13 13 14 14 [[package]] 15 - name = "adler2" 16 - version = "2.0.0" 15 + name = "assert-json-diff" 16 + version = "2.0.2" 17 17 source = "registry+https://github.com/rust-lang/crates.io-index" 18 - checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 18 + checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" 19 + dependencies = [ 20 + "serde", 21 + "serde_json", 22 + ] 19 23 20 24 [[package]] 21 25 name = "atomic-waker" ··· 28 32 version = "1.4.0" 29 33 source = "registry+https://github.com/rust-lang/crates.io-index" 30 34 checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 31 - 32 - [[package]] 33 - name = "backtrace" 34 - version = "0.3.74" 35 - source = "registry+https://github.com/rust-lang/crates.io-index" 36 - checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 37 - dependencies = [ 38 - "addr2line", 39 - "cfg-if", 40 - "libc", 41 - "miniz_oxide", 42 - "object", 43 - "rustc-demangle", 44 - "windows-targets 0.52.6", 45 - ] 46 35 47 36 [[package]] 48 37 name = "base64" ··· 159 148 version = "0.8.21" 160 149 source = "registry+https://github.com/rust-lang/crates.io-index" 161 150 checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 151 + 152 + [[package]] 153 + name = "deadpool" 154 + version = "0.12.3" 155 + source = "registry+https://github.com/rust-lang/crates.io-index" 156 + checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b" 157 + dependencies = [ 158 + "deadpool-runtime", 159 + "lazy_static", 160 + "num_cpus", 161 + "tokio", 162 + ] 163 + 164 + [[package]] 165 + name = "deadpool-runtime" 166 + version = "0.1.4" 167 + source = "registry+https://github.com/rust-lang/crates.io-index" 168 + checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" 162 169 163 170 [[package]] 164 171 name = "deranged" ··· 360 367 ] 361 368 362 369 [[package]] 363 - name = "gimli" 364 - version = "0.31.1" 365 - source = "registry+https://github.com/rust-lang/crates.io-index" 366 - checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 367 - 368 - [[package]] 369 370 name = "h2" 370 371 version = "0.4.8" 371 372 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 389 390 version = "0.15.2" 390 391 source = "registry+https://github.com/rust-lang/crates.io-index" 391 392 checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 393 + 394 + [[package]] 395 + name = "hermit-abi" 396 + version = "0.5.2" 397 + source = "registry+https://github.com/rust-lang/crates.io-index" 398 + checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 392 399 393 400 [[package]] 394 401 name = "http" ··· 438 445 439 446 [[package]] 440 447 name = "hyper" 441 - version = "1.6.0" 448 + version = "1.8.1" 442 449 source = "registry+https://github.com/rust-lang/crates.io-index" 443 - checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 450 + checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" 444 451 dependencies = [ 452 + "atomic-waker", 445 453 "bytes", 446 454 "futures-channel", 447 - "futures-util", 455 + "futures-core", 448 456 "h2", 449 457 "http", 450 458 "http-body", ··· 452 460 "httpdate", 453 461 "itoa", 454 462 "pin-project-lite", 463 + "pin-utils", 455 464 "smallvec", 456 465 "tokio", 457 466 "want", ··· 503 512 "http-body", 504 513 "hyper", 505 514 "pin-project-lite", 506 - "socket2", 515 + "socket2 0.5.8", 507 516 "tokio", 508 517 "tower-service", 509 518 "tracing", ··· 681 690 ] 682 691 683 692 [[package]] 693 + name = "lazy_static" 694 + version = "1.5.0" 695 + source = "registry+https://github.com/rust-lang/crates.io-index" 696 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 697 + 698 + [[package]] 684 699 name = "libc" 685 - version = "0.2.171" 700 + version = "0.2.183" 686 701 source = "registry+https://github.com/rust-lang/crates.io-index" 687 - checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" 702 + checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" 688 703 689 704 [[package]] 690 705 name = "linux-raw-sys" ··· 733 748 checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 734 749 735 750 [[package]] 736 - name = "miniz_oxide" 737 - version = "0.8.5" 738 - source = "registry+https://github.com/rust-lang/crates.io-index" 739 - checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" 740 - dependencies = [ 741 - "adler2", 742 - ] 743 - 744 - [[package]] 745 751 name = "mio" 746 752 version = "1.0.3" 747 753 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 776 782 checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 777 783 778 784 [[package]] 779 - name = "object" 780 - version = "0.36.7" 785 + name = "num_cpus" 786 + version = "1.17.0" 781 787 source = "registry+https://github.com/rust-lang/crates.io-index" 782 - checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 788 + checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" 783 789 dependencies = [ 784 - "memchr", 790 + "hermit-abi", 791 + "libc", 785 792 ] 786 793 787 794 [[package]] ··· 939 946 ] 940 947 941 948 [[package]] 949 + name = "regex" 950 + version = "1.12.3" 951 + source = "registry+https://github.com/rust-lang/crates.io-index" 952 + checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" 953 + dependencies = [ 954 + "aho-corasick", 955 + "memchr", 956 + "regex-automata", 957 + "regex-syntax", 958 + ] 959 + 960 + [[package]] 961 + name = "regex-automata" 962 + version = "0.4.14" 963 + source = "registry+https://github.com/rust-lang/crates.io-index" 964 + checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" 965 + dependencies = [ 966 + "aho-corasick", 967 + "memchr", 968 + "regex-syntax", 969 + ] 970 + 971 + [[package]] 972 + name = "regex-syntax" 973 + version = "0.8.10" 974 + source = "registry+https://github.com/rust-lang/crates.io-index" 975 + checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" 976 + 977 + [[package]] 942 978 name = "replace_with" 943 979 version = "0.1.7" 944 980 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1003 1039 ] 1004 1040 1005 1041 [[package]] 1006 - name = "rustc-demangle" 1007 - version = "0.1.24" 1008 - source = "registry+https://github.com/rust-lang/crates.io-index" 1009 - checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1010 - 1011 - [[package]] 1012 1042 name = "rustix" 1013 1043 version = "1.0.2" 1014 1044 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1217 1247 ] 1218 1248 1219 1249 [[package]] 1250 + name = "socket2" 1251 + version = "0.6.3" 1252 + source = "registry+https://github.com/rust-lang/crates.io-index" 1253 + checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" 1254 + dependencies = [ 1255 + "libc", 1256 + "windows-sys 0.61.2", 1257 + ] 1258 + 1259 + [[package]] 1220 1260 name = "stable_deref_trait" 1221 1261 version = "1.2.0" 1222 1262 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1230 1270 1231 1271 [[package]] 1232 1272 name = "strong-api-fetch" 1233 - version = "0.2.0" 1273 + version = "0.2.1" 1234 1274 dependencies = [ 1235 1275 "clickhouse", 1236 1276 "dotenvy", ··· 1245 1285 1246 1286 [[package]] 1247 1287 name = "strong-api-lib" 1248 - version = "0.3.0" 1288 + version = "0.3.1" 1249 1289 dependencies = [ 1250 1290 "reqwest", 1251 1291 "serde", 1252 1292 "serde_json", 1293 + "tokio", 1294 + "wiremock", 1253 1295 ] 1254 1296 1255 1297 [[package]] ··· 1386 1428 1387 1429 [[package]] 1388 1430 name = "tokio" 1389 - version = "1.44.2" 1431 + version = "1.50.0" 1390 1432 source = "registry+https://github.com/rust-lang/crates.io-index" 1391 - checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" 1433 + checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" 1392 1434 dependencies = [ 1393 - "backtrace", 1394 1435 "bytes", 1395 1436 "libc", 1396 1437 "mio", 1397 1438 "parking_lot", 1398 1439 "pin-project-lite", 1399 1440 "signal-hook-registry", 1400 - "socket2", 1441 + "socket2 0.6.3", 1401 1442 "tokio-macros", 1402 - "windows-sys 0.52.0", 1443 + "windows-sys 0.61.2", 1403 1444 ] 1404 1445 1405 1446 [[package]] 1406 1447 name = "tokio-macros" 1407 - version = "2.5.0" 1448 + version = "2.6.1" 1408 1449 source = "registry+https://github.com/rust-lang/crates.io-index" 1409 - checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" 1450 + checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" 1410 1451 dependencies = [ 1411 1452 "proc-macro2", 1412 1453 "quote", ··· 1682 1723 checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" 1683 1724 1684 1725 [[package]] 1726 + name = "windows-link" 1727 + version = "0.2.1" 1728 + source = "registry+https://github.com/rust-lang/crates.io-index" 1729 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 1730 + 1731 + [[package]] 1685 1732 name = "windows-registry" 1686 1733 version = "0.4.0" 1687 1734 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1698 1745 source = "registry+https://github.com/rust-lang/crates.io-index" 1699 1746 checksum = "06374efe858fab7e4f881500e6e86ec8bc28f9462c47e5a9941a0142ad86b189" 1700 1747 dependencies = [ 1701 - "windows-link", 1748 + "windows-link 0.1.0", 1702 1749 ] 1703 1750 1704 1751 [[package]] ··· 1707 1754 source = "registry+https://github.com/rust-lang/crates.io-index" 1708 1755 checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319" 1709 1756 dependencies = [ 1710 - "windows-link", 1757 + "windows-link 0.1.0", 1711 1758 ] 1712 1759 1713 1760 [[package]] ··· 1726 1773 checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1727 1774 dependencies = [ 1728 1775 "windows-targets 0.52.6", 1776 + ] 1777 + 1778 + [[package]] 1779 + name = "windows-sys" 1780 + version = "0.61.2" 1781 + source = "registry+https://github.com/rust-lang/crates.io-index" 1782 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 1783 + dependencies = [ 1784 + "windows-link 0.2.1", 1729 1785 ] 1730 1786 1731 1787 [[package]] ··· 1855 1911 version = "0.53.0" 1856 1912 source = "registry+https://github.com/rust-lang/crates.io-index" 1857 1913 checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" 1914 + 1915 + [[package]] 1916 + name = "wiremock" 1917 + version = "0.6.5" 1918 + source = "registry+https://github.com/rust-lang/crates.io-index" 1919 + checksum = "08db1edfb05d9b3c1542e521aea074442088292f00b5f28e435c714a98f85031" 1920 + dependencies = [ 1921 + "assert-json-diff", 1922 + "base64", 1923 + "deadpool", 1924 + "futures", 1925 + "http", 1926 + "http-body-util", 1927 + "hyper", 1928 + "hyper-util", 1929 + "log", 1930 + "once_cell", 1931 + "regex", 1932 + "serde", 1933 + "serde_json", 1934 + "tokio", 1935 + "url", 1936 + ] 1858 1937 1859 1938 [[package]] 1860 1939 name = "wit-bindgen-rt"
+136
fetch_test_fixtures.sh
··· 1 + #!/usr/bin/env bash 2 + # --------------------------------------------------------------------------- 3 + # fetch_test_fixtures.sh 4 + # 5 + # Fetches real API responses from the Strong backend and saves them as 6 + # fixture files in strong-api-lib/tests/fixtures/. 7 + # 8 + # Usage: 9 + # STRONG_USER=you@example.com STRONG_PASS=yourpassword ./fetch_test_fixtures.sh 10 + # 11 + # Optionally set BASE_URL if you are pointing at a different backend: 12 + # BASE_URL=https://api.strong.app ./fetch_test_fixtures.sh 13 + # --------------------------------------------------------------------------- 14 + 15 + set -uo pipefail 16 + 17 + # Load .env from the project root if it exists (so STRONG_USER, STRONG_PASS, 18 + # and STRONG_BACKEND don't have to be passed manually every time). 19 + SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" 20 + if [[ -f "${SCRIPT_DIR}/.env" ]]; then 21 + echo "==> Loading ${SCRIPT_DIR}/.env" 22 + set -a 23 + # shellcheck source=/dev/null 24 + source "${SCRIPT_DIR}/.env" 25 + set +a 26 + fi 27 + 28 + BASE_URL="${BASE_URL:-${STRONG_BACKEND:-https://back.strong.app}}" 29 + FIXTURES_DIR="$(dirname "$0")/strong-api-lib/tests/fixtures" 30 + 31 + : "${STRONG_USER:?Set STRONG_USER to your Strong username or e-mail}" 32 + : "${STRONG_PASS:?Set STRONG_PASS to your Strong password}" 33 + 34 + echo "==> Logging in..." 35 + LOGIN_JSON=$(curl -s --max-time 15 --connect-timeout 10 -X POST "${BASE_URL}/auth/login" \ 36 + -H "User-Agent: Strong Android" \ 37 + -H "Content-Type: application/json" \ 38 + -H "Accept: application/json" \ 39 + -H "x-client-build: 600013" \ 40 + -H "x-client-platform: android" \ 41 + -d "{\"usernameOrEmail\": \"${STRONG_USER}\", \"password\": \"${STRONG_PASS}\"}" \ 42 + || { echo "ERROR: curl request failed (timeout or network issue? Check BASE_URL=${BASE_URL})"; exit 1; }) 43 + 44 + echo " Raw login response: $LOGIN_JSON" 45 + 46 + ACCESS_TOKEN=$(echo "$LOGIN_JSON" | python3 -c " 47 + import sys, json 48 + try: 49 + data = json.load(sys.stdin) 50 + except json.JSONDecodeError as e: 51 + print(f'ERROR: response is not valid JSON: {e}', file=sys.stderr) 52 + sys.exit(1) 53 + token = data.get('accessToken') 54 + if not token: 55 + print(f'ERROR: no accessToken in response. Keys present: {list(data.keys())}', file=sys.stderr) 56 + sys.exit(1) 57 + print(token) 58 + ") || exit 1 59 + 60 + USER_ID=$(echo "$LOGIN_JSON" | python3 -c " 61 + import sys, json 62 + data = json.load(sys.stdin) 63 + uid = data.get('userId') 64 + if not uid: 65 + print(f'ERROR: no userId in response. Keys present: {list(data.keys())}', file=sys.stderr) 66 + sys.exit(1) 67 + print(uid) 68 + ") || exit 1 69 + 70 + echo "$LOGIN_JSON" | python3 -m json.tool > "${FIXTURES_DIR}/login_response.json" 71 + echo " Saved login_response.json" 72 + 73 + echo " Logged in as user ${USER_ID}" 74 + 75 + # --------------------------------------------------------------------------- 76 + # GET /api/measurements (page 1) 77 + # --------------------------------------------------------------------------- 78 + echo "==> Fetching measurements (page 1)..." 79 + curl -s "${BASE_URL}/api/measurements?page=1" \ 80 + -H "User-Agent: Strong Android" \ 81 + -H "Accept: application/json" \ 82 + -H "x-client-build: 600013" \ 83 + -H "x-client-platform: android" \ 84 + | python3 -m json.tool > "${FIXTURES_DIR}/measurements_response.json" 85 + echo " Saved measurements_response.json" 86 + 87 + # --------------------------------------------------------------------------- 88 + # GET /api/users/{userId} with logs + measurements embedded 89 + # Uses a small limit so the fixture stays manageable. 90 + # --------------------------------------------------------------------------- 91 + echo "==> Fetching user (with logs embedded)..." 92 + curl -s "${BASE_URL}/api/users/${USER_ID}?limit=5&continuation=&include=log&include=measurement" \ 93 + -H "User-Agent: Strong Android" \ 94 + -H "Accept: application/json" \ 95 + -H "Authorization: Bearer ${ACCESS_TOKEN}" \ 96 + -H "x-client-build: 600013" \ 97 + -H "x-client-platform: android" \ 98 + | python3 -m json.tool > "${FIXTURES_DIR}/user_response.json" 99 + echo " Saved user_response.json" 100 + 101 + # --------------------------------------------------------------------------- 102 + # GET /api/users/{userId} (all include types, for a wider integration test) 103 + # --------------------------------------------------------------------------- 104 + echo "==> Fetching user (all includes)..." 105 + curl -s "${BASE_URL}/api/users/${USER_ID}?limit=5&continuation=&include=log&include=measurement&include=tag&include=template&include=folder&include=widget&include=measuredValue" \ 106 + -H "User-Agent: Strong Android" \ 107 + -H "Accept: application/json" \ 108 + -H "Authorization: Bearer ${ACCESS_TOKEN}" \ 109 + -H "x-client-build: 600013" \ 110 + -H "x-client-platform: android" \ 111 + | python3 -m json.tool > "${FIXTURES_DIR}/user_response_all_includes.json" 112 + echo " Saved user_response_all_includes.json" 113 + 114 + # --------------------------------------------------------------------------- 115 + # Simulate a failed login to capture ApiErrorResponse shape 116 + # --------------------------------------------------------------------------- 117 + echo "==> Fetching error response (bad credentials)..." 118 + curl -s -X POST "${BASE_URL}/auth/login" \ 119 + -H "User-Agent: Strong Android" \ 120 + -H "Content-Type: application/json" \ 121 + -H "Accept: application/json" \ 122 + -H "x-client-build: 600013" \ 123 + -H "x-client-platform: android" \ 124 + -d '{"usernameOrEmail": "invalid@example.com", "password": "wrongpassword"}' \ 125 + | python3 -m json.tool > "${FIXTURES_DIR}/error_response.json" 126 + echo " Saved error_response.json" 127 + 128 + echo "" 129 + echo "All fixtures saved to ${FIXTURES_DIR}" 130 + echo "Replace the synthetic fixture files with these real responses to make" 131 + echo "the integration tests run against actual API data." 132 + 133 + 134 + 135 + 136 +
+1 -1
strong-api-fetch/Cargo.toml
··· 1 1 [package] 2 2 name = "strong-api-fetch" 3 - version = "0.2.0" 3 + version = "0.2.1" 4 4 edition = "2024" 5 5 6 6 [dependencies]
+8 -6
strong-api-fetch/src/clickhouse_saver.rs
··· 65 65 let mut insert = self.client.insert(&self.table_name)?; 66 66 67 67 for exercise in &workout.exercises { 68 - let exercise_nr = workout.exercises.iter().position(|x| x.id == exercise.id).unwrap() as u32; 68 + let exercise_nr = workout 69 + .exercises 70 + .iter() 71 + .position(|x| x.id == exercise.id) 72 + .unwrap() as u32; 69 73 for set in &exercise.sets { 70 74 let start_dt = OffsetDateTime::parse( 71 75 &workout.start_date.clone().unwrap_or_default(), 72 76 &Rfc3339, 73 77 )?; 74 78 75 - let end_dt = OffsetDateTime::parse( 76 - &workout.end_date.clone().unwrap_or_default(), 77 - &Rfc3339, 78 - )?; 79 + let end_dt = 80 + OffsetDateTime::parse(&workout.end_date.clone().unwrap_or_default(), &Rfc3339)?; 79 81 80 82 let set_nr = exercise.sets.iter().position(|x| x.id == set.id).unwrap() as u32; 81 83 ··· 109 111 println!("Workout {} imported successfully", workout.id); 110 112 Ok(()) 111 113 } 112 - } 114 + }
+11 -17
strong-api-fetch/src/main.rs
··· 21 21 22 22 // Load configuration from environment variables. 23 23 let config = load_config()?; 24 - let url = Url::parse(&config.strong_backend) 25 - .expect("STRONG_BACKEND is not a valid URL"); 24 + let url = Url::parse(&config.strong_backend).expect("STRONG_BACKEND is not a valid URL"); 26 25 27 26 // Initialize the API and ClickHouse saver. 28 27 let mut strong_api = StrongApi::new(url); 29 28 let clickhouse_saver = create_clickhouse_saver(&config); 30 29 31 30 // Log in to the API. 32 - strong_api.login(config.username.as_str(), config.password.as_str()).await?; 31 + strong_api 32 + .login(config.username.as_str(), config.password.as_str()) 33 + .await?; 33 34 34 35 // Get the measurements (either from file or API). 35 36 let measurements_response = get_measurements_response(&mut strong_api).await?; ··· 72 73 /// Load configuration values from environment variables. 73 74 fn load_config() -> Result<Config, Box<dyn std::error::Error>> { 74 75 Ok(Config { 75 - username: env::var("STRONG_USER") 76 - .expect("STRONG_USER must be set"), 77 - password: env::var("STRONG_PASS") 78 - .expect("STRONG_PASS must be set"), 79 - strong_backend: env::var("STRONG_BACKEND") 80 - .expect("STRONG_BACKEND must be set"), 81 - clickhouse_url: env::var("CLICKHOUSE_URL") 82 - .expect("CLICKHOUSE_URL must be set"), 83 - clickhouse_user: env::var("CLICKHOUSE_USER") 84 - .expect("CLICKHOUSE_USER must be set"), 85 - clickhouse_pass: env::var("CLICKHOUSE_PASS") 86 - .expect("CLICKHOUSE_PASS must be set"), 76 + username: env::var("STRONG_USER").expect("STRONG_USER must be set"), 77 + password: env::var("STRONG_PASS").expect("STRONG_PASS must be set"), 78 + strong_backend: env::var("STRONG_BACKEND").expect("STRONG_BACKEND must be set"), 79 + clickhouse_url: env::var("CLICKHOUSE_URL").expect("CLICKHOUSE_URL must be set"), 80 + clickhouse_user: env::var("CLICKHOUSE_USER").expect("CLICKHOUSE_USER must be set"), 81 + clickhouse_pass: env::var("CLICKHOUSE_PASS").expect("CLICKHOUSE_PASS must be set"), 87 82 clickhouse_database: env::var("CLICKHOUSE_DATABASE") 88 83 .expect("CLICKHOUSE_DATABASE must be set"), 89 - clickhouse_table: env::var("CLICKHOUSE_TABLE") 90 - .expect("CLICKHOUSE_TABLE must be set"), 84 + clickhouse_table: env::var("CLICKHOUSE_TABLE").expect("CLICKHOUSE_TABLE must be set"), 91 85 }) 92 86 } 93 87
+5 -1
strong-api-lib/Cargo.toml
··· 1 1 [package] 2 2 name = "strong-api-lib" 3 - version = "0.3.0" 3 + version = "0.3.1" 4 4 edition = "2024" 5 5 6 6 [dependencies] 7 7 reqwest = { version = "0.12.12", features = ["json"] } 8 8 serde_json = "1.0.139" 9 9 serde = { version = "1.0.218", features = ["derive"] } 10 + 11 + [dev-dependencies] 12 + wiremock = "0.6" 13 + tokio = { version = "1", features = ["macros", "rt-multi-thread"] } 10 14 11 15 [features] 12 16 full = []
+6 -43
strong-api-lib/src/data_transformer.rs
··· 169 169 .and_then(|cell| cell.value.as_ref()) 170 170 .and_then(|s| s.parse::<f32>().ok()); 171 171 172 - Some( 173 - Set { 174 - id: cell_set.id.clone(), 175 - weight, 176 - reps, 177 - rpe, 178 - } 179 - ) 172 + Some(Set { 173 + id: cell_set.id.clone(), 174 + weight, 175 + reps, 176 + rpe, 177 + }) 180 178 } 181 179 182 180 fn get_measurement_id_from_link(links: &CellSetGroupLinks) -> String { ··· 189 187 parts[parts.len() - 1].to_string() 190 188 } 191 189 } 192 - 193 - #[cfg(test)] 194 - mod test { 195 - use crate::models::common::Link; 196 - use crate::models::workout::CellSetGroupLinks; 197 - use super::*; 198 - 199 - #[test] 200 - fn test_can_get_measurement_id_from_link() { 201 - let links = CellSetGroupLinks { 202 - measurement: Some( 203 - Link { 204 - href: "/api/users/0f9fc87d-0e60-46c6-b98d-9b1b69423218/measurements/a3f1d57d-da0e-466d-a691-c03695d39418".to_string() 205 - } 206 - ), 207 - }; 208 - 209 - assert_eq!( 210 - "a3f1d57d-da0e-466d-a691-c03695d39418".to_string(), 211 - DataTransformer::get_measurement_id_from_link(&links) 212 - ); 213 - } 214 - 215 - #[test] 216 - fn test_can_get_measurement_id_from_link_on_empty() { 217 - let links = CellSetGroupLinks { 218 - measurement: None, 219 - }; 220 - 221 - assert_eq!( 222 - "".to_string(), 223 - DataTransformer::get_measurement_id_from_link(&links) 224 - ); 225 - } 226 - }
+36 -13
strong-api-lib/src/strong_api.rs
··· 90 90 username: &str, 91 91 password: &str, 92 92 ) -> Result<(), Box<dyn std::error::Error>> { 93 - let url = self.url.join("auth/login")?; 93 + let url = self 94 + .url 95 + .join("auth/login") 96 + .expect("joining auth/login has failed, check the base URL"); 94 97 let body = json!({ 95 98 "usernameOrEmail": username, 96 99 "password": password ··· 103 106 .json(&body) 104 107 .send() 105 108 .await?; 106 - let response_text = response.text().await?; 109 + let response_text = response.text().await.expect("failed to read response body"); 107 110 108 111 let parsed: LoginResponse = serde_json::from_str(&response_text)?; 109 112 ··· 116 119 117 120 /// Refreshes the access token using tokens obtained during login. 118 121 pub async fn refresh(&mut self) -> Result<(), Box<dyn std::error::Error>> { 119 - let url = self.url.join("auth/login/refresh")?; 122 + let url = self 123 + .url 124 + .join("auth/login/refresh") 125 + .expect("joining auth/login/refresh has failed, check the base URL"); 120 126 let body = json!({ 121 127 "accessToken": self.access_token, 122 128 "refreshToken": self.refresh_token ··· 133 139 .send() 134 140 .await?; 135 141 136 - let response_text = response.text().await?; 142 + let response_text = response.text().await.expect("failed to read response body"); 137 143 let parsed: LoginResponse = serde_json::from_str(&response_text)?; 138 144 139 145 self.access_token = parsed.access_token; ··· 149 155 access_token: String, 150 156 refresh_token: String, 151 157 ) -> Result<(), Box<dyn std::error::Error>> { 152 - let url = self.url.join("auth/login/refresh")?; 158 + let url = self 159 + .url 160 + .join("auth/login/refresh") 161 + .expect("joining auth/login/refresh has failed, check the base URL"); 153 162 let body = json!({ 154 163 "accessToken": access_token.clone(), 155 164 "refreshToken": refresh_token, ··· 163 172 .json(&body) 164 173 .send() 165 174 .await?; 166 - let response_text = response.text().await?; 175 + let response_text = response.text().await.expect("failed to read response body"); 167 176 let parsed: LoginResponse = serde_json::from_str(&response_text)?; 168 177 169 178 self.access_token = parsed.access_token; ··· 186 195 .user_id 187 196 .as_ref() 188 197 .ok_or("Missing user id. Use `login` before calling `get_user`")?; 189 - let mut url = self.url.join(&format!("api/users/{user_id}"))?; 198 + let mut url = self 199 + .url 200 + .join(&format!("api/users/{user_id}")) 201 + .expect("joining api/users/{user_id} has failed, check the base URL"); 190 202 191 203 { 192 204 // Use query_pairs_mut to build the query string. ··· 208 220 209 221 // Capture the status before consuming the response. 210 222 let status = response.status(); 211 - let response_text = response.text().await?; 223 + let response_text = response.text().await.expect("failed to read response body"); 212 224 213 225 if !status.is_success() { 214 226 let api_error: ApiErrorResponse = serde_json::from_str(&response_text)?; ··· 227 239 &self, 228 240 page: i8, 229 241 ) -> Result<MeasurementsResponse, Box<dyn std::error::Error>> { 230 - let mut url = self.url.join("api/measurements")?; 242 + let mut url = self 243 + .url 244 + .join("api/measurements") 245 + .expect("joining api/measurements has failed, check the base URL"); 231 246 232 247 { 233 248 let mut query_pairs = url.query_pairs_mut(); 234 249 query_pairs.append_pair("page", &page.to_string()); 235 250 } 236 251 237 - let response = self.client.get(url).headers(Self::default_headers()).send().await?; 238 - let response_text = response.text().await?; 252 + let response = self 253 + .client 254 + .get(url) 255 + .headers(Self::default_headers()) 256 + .send() 257 + .await?; 258 + let response_text = response.text().await.expect("failed to read response body"); 239 259 240 260 let response: MeasurementsResponse = serde_json::from_str(&response_text)?; 241 261 ··· 244 264 245 265 pub async fn get_logs_raw(&self) -> Result<String, Box<dyn std::error::Error>> { 246 266 let user_id = self.user_id.as_ref().ok_or("Missing user id")?; 247 - let url = self.url.join(&format!("api/logs/{user_id}"))?; 267 + let url = self 268 + .url 269 + .join(&format!("api/logs/{user_id}")) 270 + .expect("joining api/logs/{user_id} has failed, check the base URL"); 248 271 let response = self 249 272 .client 250 273 .get(url) ··· 252 275 .headers(self.headers.clone()) 253 276 .send() 254 277 .await?; 255 - let response_text = response.text().await?; 278 + let response_text = response.text().await.expect("failed to read response body"); 256 279 257 280 Ok(response_text) 258 281 }
+3
strong-api-lib/tests/auth_tests.rs
··· 1 + // LoginResponse is a plain #[derive(Deserialize)] struct with no logic. 2 + // Its deserialization is covered by test_login_sets_tokens in strong_api_tests.rs. 3 + // This file is intentionally empty.
+359
strong-api-lib/tests/data_transformer_tests.rs
··· 1 + use strong_api_lib::data_transformer::DataTransformer; 2 + use strong_api_lib::models::measurement::MeasurementsResponse; 3 + use strong_api_lib::models::workout::UserResponse; 4 + 5 + fn load_fixture(name: &str) -> String { 6 + std::fs::read_to_string(format!( 7 + "{}/tests/fixtures/{}", 8 + env!("CARGO_MANIFEST_DIR"), 9 + name 10 + )) 11 + .unwrap_or_else(|_| panic!("fixture '{name}' not found")) 12 + } 13 + 14 + fn measurements_from_fixture() -> MeasurementsResponse { 15 + let json = load_fixture("measurements_response.json"); 16 + serde_json::from_str(&json).unwrap() 17 + } 18 + 19 + fn logs_from_fixture() -> Option<Vec<strong_api_lib::models::workout::Log>> { 20 + let json = load_fixture("user_response.json"); 21 + let user: UserResponse = serde_json::from_str(&json).unwrap(); 22 + user.embedded.log 23 + } 24 + 25 + // --------------------------------------------------------------------------- 26 + // Basic transformation — no measurements loaded, names fall back to empty 27 + // --------------------------------------------------------------------------- 28 + 29 + #[test] 30 + fn test_transform_without_measurements_produces_workouts() { 31 + let transformer = DataTransformer::new(); 32 + let logs = logs_from_fixture(); 33 + let workouts = transformer.get_measurements_from_logs(&logs).unwrap(); 34 + 35 + assert!(!workouts.is_empty(), "should produce at least one workout"); 36 + // Without a measurement lookup every exercise name is empty string 37 + for exercise in &workouts[0].exercises { 38 + assert_eq!(exercise.name, ""); 39 + } 40 + } 41 + 42 + // --------------------------------------------------------------------------- 43 + // With measurements: names are resolved and exercises are non-empty 44 + // --------------------------------------------------------------------------- 45 + 46 + #[test] 47 + fn test_transform_with_measurements_resolves_names() { 48 + let transformer = 49 + DataTransformer::new().with_measurements_response(measurements_from_fixture()); 50 + let logs = logs_from_fixture(); 51 + let workouts = transformer.get_measurements_from_logs(&logs).unwrap(); 52 + 53 + let exercises = &workouts[0].exercises; 54 + assert!(!exercises.is_empty(), "should have at least one exercise"); 55 + 56 + // Every exercise whose measurement was found in the lookup has a non-empty name. 57 + let named = exercises.iter().filter(|e| !e.name.is_empty()).count(); 58 + assert!( 59 + named > 0, 60 + "at least one exercise should have a resolved name" 61 + ); 62 + } 63 + 64 + // --------------------------------------------------------------------------- 65 + // Exercises come only from groups that have at least one valid (non-rest) set 66 + // --------------------------------------------------------------------------- 67 + 68 + #[test] 69 + fn test_only_groups_with_real_sets_become_exercises() { 70 + let transformer = 71 + DataTransformer::new().with_measurements_response(measurements_from_fixture()); 72 + let logs = logs_from_fixture(); 73 + let workouts = transformer.get_measurements_from_logs(&logs).unwrap(); 74 + 75 + // Count CSGs in the raw fixture log 76 + let json = load_fixture("user_response.json"); 77 + let user: UserResponse = serde_json::from_str(&json).unwrap(); 78 + let raw_csg_count = user.embedded.log.unwrap()[0].embedded.cell_set_group.len(); 79 + 80 + // Transformed exercise count can be at most the number of raw CSGs 81 + assert!(workouts[0].exercises.len() <= raw_csg_count); 82 + } 83 + 84 + // --------------------------------------------------------------------------- 85 + // Sets: weight and reps fields are always present on every set 86 + // --------------------------------------------------------------------------- 87 + 88 + #[test] 89 + fn test_sets_have_weight_and_reps() { 90 + let transformer = 91 + DataTransformer::new().with_measurements_response(measurements_from_fixture()); 92 + let logs = logs_from_fixture(); 93 + let workouts = transformer.get_measurements_from_logs(&logs).unwrap(); 94 + 95 + let exercises = &workouts[0].exercises; 96 + for exercise in exercises { 97 + assert!( 98 + !exercise.sets.is_empty(), 99 + "exercise {} should have sets", 100 + exercise.id 101 + ); 102 + for set in &exercise.sets { 103 + let _ = set.reps; // always present 104 + let _ = set.weight; // optional (None for bodyweight) 105 + } 106 + } 107 + } 108 + 109 + // --------------------------------------------------------------------------- 110 + // Workout metadata is preserved 111 + // --------------------------------------------------------------------------- 112 + 113 + #[test] 114 + fn test_workout_metadata_is_present() { 115 + let transformer = DataTransformer::new(); 116 + let logs = logs_from_fixture(); 117 + let workouts = transformer.get_measurements_from_logs(&logs).unwrap(); 118 + 119 + let workout = &workouts[0]; 120 + assert!(!workout.id.is_empty()); 121 + assert!(workout.timezone.is_some(), "timezone should be present"); 122 + assert!(workout.start_date.is_some(), "start_date should be present"); 123 + assert!(workout.end_date.is_some(), "end_date should be present"); 124 + } 125 + 126 + // --------------------------------------------------------------------------- 127 + // Measurement ID extraction from link (replaces former inline unit tests) 128 + // Tested indirectly through the public API: if the ID is extracted correctly 129 + // the name lookup succeeds; if the link is absent the name is empty. 130 + // --------------------------------------------------------------------------- 131 + 132 + fn make_log_with_measurement_link( 133 + measurement_href: Option<&str>, 134 + ) -> Vec<strong_api_lib::models::workout::Log> { 135 + use serde_json::json; 136 + use strong_api_lib::models::common::Link; 137 + use strong_api_lib::models::workout::{ 138 + Cell, CellSet, CellSetGroup, CellSetGroupEmbedded, CellSetGroupLinks, Log, LogEmbedded, 139 + }; 140 + 141 + vec![Log { 142 + id: "log-link-test".to_string(), 143 + embedded: LogEmbedded { 144 + cell_set_group: vec![CellSetGroup { 145 + id: "csg-link-test".to_string(), 146 + links: CellSetGroupLinks { 147 + measurement: measurement_href.map(|href| Link { 148 + href: href.to_string(), 149 + }), 150 + }, 151 + embedded: CellSetGroupEmbedded {}, 152 + cell_sets: vec![CellSet { 153 + id: "cs-link-test".to_string(), 154 + is_completed: Some(true), 155 + cells: vec![ 156 + Cell { 157 + id: "c1".to_string(), 158 + cell_type: "BARBELL_WEIGHT".to_string(), 159 + value: Some("80".to_string()), 160 + }, 161 + Cell { 162 + id: "c2".to_string(), 163 + cell_type: "REPS".to_string(), 164 + value: Some("5".to_string()), 165 + }, 166 + ], 167 + }], 168 + }], 169 + }, 170 + links: json!({}), 171 + timezone_id: None, 172 + created: "2024-01-01T00:00:00Z".to_string(), 173 + last_changed: "2024-01-01T00:00:00Z".to_string(), 174 + name: None, 175 + access: "private".to_string(), 176 + start_date: None, 177 + end_date: None, 178 + log_type: "WORKOUT".to_string(), 179 + }] 180 + } 181 + 182 + #[test] 183 + fn test_measurement_id_extracted_from_link_resolves_name() { 184 + // Use a known measurement ID from the fixture 185 + let measurements = measurements_from_fixture(); 186 + let known = &measurements.embedded.measurements[0]; 187 + let known_id = known.id.clone(); 188 + let expected_name = known.name.to_string(); 189 + 190 + let href = format!("/api/users/00000000-0000-0000-0000-000000000001/measurements/{known_id}"); 191 + let logs = make_log_with_measurement_link(Some(&href)); 192 + 193 + let transformer = DataTransformer::new().with_measurements_response(measurements); 194 + let workouts = transformer.get_measurements_from_logs(&Some(logs)).unwrap(); 195 + 196 + assert_eq!(workouts[0].exercises[0].name, expected_name); 197 + } 198 + 199 + #[test] 200 + fn test_missing_measurement_link_gives_empty_name() { 201 + let logs = make_log_with_measurement_link(None); 202 + 203 + let transformer = 204 + DataTransformer::new().with_measurements_response(measurements_from_fixture()); 205 + let workouts = transformer.get_measurements_from_logs(&Some(logs)).unwrap(); 206 + 207 + assert_eq!(workouts[0].exercises[0].name, ""); 208 + } 209 + 210 + // --------------------------------------------------------------------------- 211 + // Cell type coverage — NOTE filter, all weight variants, RPE, missing REPS 212 + // --------------------------------------------------------------------------- 213 + 214 + fn make_log_with_cells( 215 + cells: Vec<(String, Option<String>)>, 216 + ) -> Vec<strong_api_lib::models::workout::Log> { 217 + use serde_json::json; 218 + use strong_api_lib::models::workout::{ 219 + Cell, CellSet, CellSetGroup, CellSetGroupEmbedded, CellSetGroupLinks, Log, LogEmbedded, 220 + }; 221 + 222 + let cells: Vec<Cell> = cells 223 + .into_iter() 224 + .enumerate() 225 + .map(|(i, (cell_type, value))| Cell { 226 + id: format!("c{i}"), 227 + cell_type, 228 + value, 229 + }) 230 + .collect(); 231 + 232 + vec![Log { 233 + id: "log-cell-test".to_string(), 234 + embedded: LogEmbedded { 235 + cell_set_group: vec![CellSetGroup { 236 + id: "csg-cell-test".to_string(), 237 + links: CellSetGroupLinks { measurement: None }, 238 + embedded: CellSetGroupEmbedded {}, 239 + cell_sets: vec![CellSet { 240 + id: "cs-cell-test".to_string(), 241 + is_completed: Some(true), 242 + cells, 243 + }], 244 + }], 245 + }, 246 + links: json!({}), 247 + timezone_id: None, 248 + created: "2024-01-01T00:00:00Z".to_string(), 249 + last_changed: "2024-01-01T00:00:00Z".to_string(), 250 + name: None, 251 + access: "private".to_string(), 252 + start_date: None, 253 + end_date: None, 254 + log_type: "WORKOUT".to_string(), 255 + }] 256 + } 257 + 258 + #[test] 259 + fn test_note_cell_type_is_excluded() { 260 + let logs = make_log_with_cells(vec![ 261 + ("NOTE".to_string(), Some("Good session".to_string())), 262 + ("REPS".to_string(), Some("10".to_string())), 263 + ]); 264 + let transformer = DataTransformer::new(); 265 + let workouts = transformer.get_measurements_from_logs(&Some(logs)).unwrap(); 266 + assert!( 267 + workouts[0].exercises.is_empty(), 268 + "NOTE cell should cause the group to be filtered out" 269 + ); 270 + } 271 + 272 + #[test] 273 + fn test_dumbbell_weight_cell_type() { 274 + let logs = make_log_with_cells(vec![ 275 + ("DUMBBELL_WEIGHT".to_string(), Some("20".to_string())), 276 + ("REPS".to_string(), Some("12".to_string())), 277 + ]); 278 + let transformer = DataTransformer::new(); 279 + let workouts = transformer.get_measurements_from_logs(&Some(logs)).unwrap(); 280 + assert_eq!(workouts[0].exercises[0].sets[0].weight, Some(20.0)); 281 + } 282 + 283 + #[test] 284 + fn test_other_weight_cell_type() { 285 + let logs = make_log_with_cells(vec![ 286 + ("OTHER_WEIGHT".to_string(), Some("15.5".to_string())), 287 + ("REPS".to_string(), Some("8".to_string())), 288 + ]); 289 + let transformer = DataTransformer::new(); 290 + let workouts = transformer.get_measurements_from_logs(&Some(logs)).unwrap(); 291 + assert_eq!(workouts[0].exercises[0].sets[0].weight, Some(15.5)); 292 + } 293 + 294 + #[test] 295 + fn test_weighted_bodyweight_cell_type() { 296 + let logs = make_log_with_cells(vec![ 297 + ("WEIGHTED_BODYWEIGHT".to_string(), Some("10".to_string())), 298 + ("REPS".to_string(), Some("15".to_string())), 299 + ]); 300 + let transformer = DataTransformer::new(); 301 + let workouts = transformer.get_measurements_from_logs(&Some(logs)).unwrap(); 302 + assert_eq!(workouts[0].exercises[0].sets[0].weight, Some(10.0)); 303 + } 304 + 305 + #[test] 306 + fn test_no_weight_cell_gives_none() { 307 + // Only REPS, no weight cell at all 308 + let logs = make_log_with_cells(vec![("REPS".to_string(), Some("10".to_string()))]); 309 + let transformer = DataTransformer::new(); 310 + let workouts = transformer.get_measurements_from_logs(&Some(logs)).unwrap(); 311 + assert_eq!(workouts[0].exercises[0].sets[0].weight, None); 312 + } 313 + 314 + #[test] 315 + fn test_rpe_cell_type() { 316 + let logs = make_log_with_cells(vec![ 317 + ("BARBELL_WEIGHT".to_string(), Some("100".to_string())), 318 + ("REPS".to_string(), Some("5".to_string())), 319 + ("RPE".to_string(), Some("9".to_string())), 320 + ]); 321 + let transformer = DataTransformer::new(); 322 + let workouts = transformer.get_measurements_from_logs(&Some(logs)).unwrap(); 323 + assert_eq!(workouts[0].exercises[0].sets[0].rpe, Some(9.0)); 324 + } 325 + 326 + #[test] 327 + fn test_missing_reps_value_defaults_to_zero() { 328 + let logs = make_log_with_cells(vec![ 329 + ("BARBELL_WEIGHT".to_string(), Some("60".to_string())), 330 + ("REPS".to_string(), None), // value is None 331 + ]); 332 + let transformer = DataTransformer::new(); 333 + let workouts = transformer.get_measurements_from_logs(&Some(logs)).unwrap(); 334 + assert_eq!(workouts[0].exercises[0].sets[0].reps, 0); 335 + } 336 + 337 + #[test] 338 + fn test_empty_logs_vec_returns_empty_workouts() { 339 + let transformer = DataTransformer::new(); 340 + let workouts = transformer 341 + .get_measurements_from_logs(&Some(vec![])) 342 + .unwrap(); 343 + assert!(workouts.is_empty()); 344 + } 345 + 346 + #[test] 347 + fn test_logs_option_none_returns_empty_workouts() { 348 + let transformer = DataTransformer::new(); 349 + let workouts = transformer.get_measurements_from_logs(&None).unwrap(); 350 + assert!(workouts.is_empty()); 351 + } 352 + 353 + #[test] 354 + fn test_data_transformer_default_equals_new() { 355 + // Exercises the Default impl (derived via `impl Default for DataTransformer`) 356 + let by_default: DataTransformer = Default::default(); 357 + let workouts = by_default.get_measurements_from_logs(&None).unwrap(); 358 + assert!(workouts.is_empty()); 359 + }
+29
strong-api-lib/tests/error_tests.rs
··· 1 + use strong_api_lib::models::error::ApiErrorResponse; 2 + 3 + #[test] 4 + fn test_api_error_display() { 5 + let err = ApiErrorResponse { 6 + code: "AUTH_001".to_string(), 7 + description: "Invalid credentials".to_string(), 8 + }; 9 + assert_eq!(err.to_string(), "AUTH_001: Invalid credentials"); 10 + } 11 + 12 + #[test] 13 + fn test_api_error_is_std_error() { 14 + let err = ApiErrorResponse { 15 + code: "ERR".to_string(), 16 + description: "something went wrong".to_string(), 17 + }; 18 + // Verify it satisfies std::error::Error (compile-time + source() returns None) 19 + let boxed: Box<dyn std::error::Error> = Box::new(err); 20 + assert!(boxed.source().is_none()); 21 + } 22 + 23 + #[test] 24 + fn test_api_error_deserializes() { 25 + let json = r#"{"code":"NOT_FOUND","description":"Resource not found"}"#; 26 + let err: ApiErrorResponse = serde_json::from_str(json).unwrap(); 27 + assert_eq!(err.code, "NOT_FOUND"); 28 + assert_eq!(err.description, "Resource not found"); 29 + }
+1
strong-api-lib/tests/fixtures/error_response.json
··· 1 + "Something went wrong. Please try again later."
+6
strong-api-lib/tests/fixtures/login_response.json
··· 1 + { 2 + "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjBmNTE4NTE4LTUxODAtNDUxOC1iNTE4LTUxYjUxODUxYjUxOCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL25hbWUiOiJUb2xpayBWLiIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6InNwYW1AcmV0dXJubnVsbC5kZSIsIlVzZXJUeXBlIjoiU3Ryb25nVXNlciIsImV4cCI6MTc3MzQzMzcyMiwiaXNzIjoiaHR0cHM6Ly9iYWNrLnN0cm9uZy5hcHAiLCJhdWQiOiJodHRwczovL2JhY2suc3Ryb25nLmFwcCJ9.P7z16q31QpBKbRkxEVDUYx1arIry-N0pCPsiErNY8W", 3 + "refreshToken": "ou2+Vuo5aXvyauzFn9OUaOlT3vMgWJI6NF1fxBl3SA4=", 4 + "expiresIn": 1200, 5 + "userId": "0f518518-5180-4518-b518-51b51851b518" 6 + }
+9515
strong-api-lib/tests/fixtures/measurements_response.json
··· 1 + { 2 + "_links": { 3 + "self": { 4 + "href": "/api/measurements" 5 + }, 6 + "next": { 7 + "href": "/api/measurements?page=2" 8 + } 9 + }, 10 + "total": 253, 11 + "_embedded": { 12 + "measurement": [ 13 + { 14 + "_links": { 15 + "self": { 16 + "href": "/api/measurements/3b8b97d5-57eb-427c-85b1-4e9222593a97" 17 + }, 18 + "tag": [ 19 + { 20 + "href": "/api/tags/core" 21 + } 22 + ] 23 + }, 24 + "id": "3b8b97d5-57eb-427c-85b1-4e9222593a97", 25 + "created": "2018-05-02T08:34:36.034Z", 26 + "lastChanged": "2018-06-20T06:29:28.172Z", 27 + "name": { 28 + "en": "Side Bend (Band)" 29 + }, 30 + "instructions": { 31 + "en": "Secure band to an elevated object so that it is taunt at shoulder level and hold the handle in the left hand.||Bend the torso and contract the obliques while exhaling.||Return slowly to the starting position while inhaling.||Repeat for reps." 32 + }, 33 + "media": [ 34 + { 35 + "url": "https://files.strong.app/users/global/IMG1vZhW35Igd.jpg", 36 + "type": "IMAGE", 37 + "contentType": "image/jpeg" 38 + }, 39 + { 40 + "url": "https://files.strong.app/users/global/THU1vZhW35Igd%403x.png", 41 + "type": "THUMBNAIL", 42 + "contentType": "image/png" 43 + } 44 + ], 45 + "cellTypeConfigs": [ 46 + { 47 + "cellType": "REPS", 48 + "mandatory": true 49 + }, 50 + { 51 + "cellType": "RPE", 52 + "isExponent": true 53 + } 54 + ], 55 + "isGlobal": true, 56 + "measurementType": "EXERCISE" 57 + }, 58 + { 59 + "_links": { 60 + "self": { 61 + "href": "/api/measurements/e0b1aa09-f4c5-4ead-95de-03a2f7530c87" 62 + }, 63 + "tag": [ 64 + { 65 + "href": "/api/tags/core" 66 + } 67 + ] 68 + }, 69 + "id": "e0b1aa09-f4c5-4ead-95de-03a2f7530c87", 70 + "created": "2018-04-27T09:35:34.207Z", 71 + "lastChanged": "2018-10-15T06:17:06.884Z", 72 + "name": { 73 + "en": "Toes To Bar" 74 + }, 75 + "instructions": { 76 + "en": "NOTE: You can perform this with your knees bent or your legs straight, but use the latter for better core activation.||Grasp the pull up bar with a shoulder-width grip. You can perform this movement with your palms facing away from you or towards you. This is your starting position.||From the hanging position, bring both of your feet up so your toes make contact with the bar.||Lower yourself down to the starting position.||Repeat for reps." 77 + }, 78 + "media": [ 79 + { 80 + "url": "https://files.strong.app/users/global/IMGZVwtvLdWzZ.jpg", 81 + "type": "IMAGE", 82 + "contentType": "image/jpeg" 83 + }, 84 + { 85 + "url": "https://files.strong.app/users/global/THUZVwtvLdWzZ%403x.png", 86 + "type": "THUMBNAIL", 87 + "contentType": "image/png" 88 + } 89 + ], 90 + "cellTypeConfigs": [ 91 + { 92 + "cellType": "REPS", 93 + "mandatory": true 94 + }, 95 + { 96 + "cellType": "RPE", 97 + "isExponent": true 98 + } 99 + ], 100 + "isGlobal": true, 101 + "measurementType": "EXERCISE" 102 + }, 103 + { 104 + "_links": { 105 + "self": { 106 + "href": "/api/measurements/d32f8c6a-e498-4fc0-b18d-5ce16680a63c" 107 + }, 108 + "tag": [ 109 + { 110 + "href": "/api/tags/full-body" 111 + } 112 + ] 113 + }, 114 + "id": "d32f8c6a-e498-4fc0-b18d-5ce16680a63c", 115 + "created": "2018-04-27T09:35:27.709Z", 116 + "lastChanged": "2018-10-15T05:46:32.666Z", 117 + "name": { 118 + "en": "Thruster (Barbell)" 119 + }, 120 + "instructions": { 121 + "en": "NOTE: As this is a complex movement, we recommend having an experienced coach demonstrate the exercise.||Set the rack height so that the barbell is positioned slightly below shoulder level.||With a braced core, chest up, create a shelf with the front of the delt with the bar touching the clavicle and neck. The fingers should rest under the bar with elbows pointed forward and up (depending on flexibility).||Unrack the bar and step back to a position with feet shoulder width apart. This is your starting position.||Keeping core braced, chest up and head neutral, break at the hips keeping pressure on the midfoot and descend into a squat. Continue lowering the body until the thighs are at or past parallel with the ground.||As you prepare to stand back up, push through your heels and begin to wrap your fingers tightly around the bar with a firm grip. When you approach the top of your squat, begin pressing the bar up towards the ceiling while making sure to move your neck backwards to make room for the bar.||The final position will be when your arms are fully extended overhead and your legs are fully straight. Hold the position for a brief moment, and lower the bar back down to starting position.||Repeat for reps." 122 + }, 123 + "media": [], 124 + "cellTypeConfigs": [ 125 + { 126 + "cellType": "BARBELL_WEIGHT", 127 + "mandatory": true 128 + }, 129 + { 130 + "cellType": "REPS", 131 + "mandatory": true 132 + }, 133 + { 134 + "cellType": "RPE", 135 + "isExponent": true 136 + } 137 + ], 138 + "isGlobal": true, 139 + "measurementType": "EXERCISE" 140 + }, 141 + { 142 + "_links": { 143 + "self": { 144 + "href": "/api/measurements/b49268bb-058e-4139-ac4a-555d1d5ae9fb" 145 + }, 146 + "tag": [ 147 + { 148 + "href": "/api/tags/full-body" 149 + } 150 + ] 151 + }, 152 + "id": "b49268bb-058e-4139-ac4a-555d1d5ae9fb", 153 + "created": "2018-04-27T09:35:21.522Z", 154 + "lastChanged": "2018-10-15T05:59:29.818Z", 155 + "name": { 156 + "en": "Sumo Deadlift High Pull (Barbell)" 157 + }, 158 + "instructions": { 159 + "en": "Position feet under bar in a wide stance. Squat down and grasp bar between legs with shoulder width grip. Brace the core, flex the quads and keep the chest upward.||Stand up by driving through the floor with the weight spread on the heel and midfoot and extending through the hips.||As you stand up, simultaneously pull the bar upwards towards your chin, driving your elbows upwards and outwards. Remember to keep the bar over midfoot at all times.||Lower weight back to the starting position and repeat for reps." 160 + }, 161 + "media": [ 162 + { 163 + "url": "https://files.strong.app/users/global/IMGQo7gD0iCiE.jpg", 164 + "type": "IMAGE", 165 + "contentType": "image/jpeg" 166 + }, 167 + { 168 + "url": "https://files.strong.app/users/global/VIDQo7gD0iCiE.mp4", 169 + "type": "VIDEO", 170 + "contentType": "video/mp4" 171 + }, 172 + { 173 + "url": "https://files.strong.app/users/global/THUQo7gD0iCiE%403x.png", 174 + "type": "THUMBNAIL", 175 + "contentType": "image/png" 176 + } 177 + ], 178 + "cellTypeConfigs": [ 179 + { 180 + "cellType": "BARBELL_WEIGHT", 181 + "mandatory": true 182 + }, 183 + { 184 + "cellType": "REPS", 185 + "mandatory": true 186 + }, 187 + { 188 + "cellType": "RPE", 189 + "isExponent": true 190 + } 191 + ], 192 + "isGlobal": true, 193 + "measurementType": "EXERCISE" 194 + }, 195 + { 196 + "_links": { 197 + "self": { 198 + "href": "/api/measurements/9bf68e10-b954-4d3d-af8b-c3ca21587a70" 199 + }, 200 + "tag": [ 201 + { 202 + "href": "/api/tags/full-body" 203 + } 204 + ] 205 + }, 206 + "id": "9bf68e10-b954-4d3d-af8b-c3ca21587a70", 207 + "created": "2018-04-27T09:35:15.026Z", 208 + "lastChanged": "2018-10-15T05:59:16.479Z", 209 + "name": { 210 + "en": "Squat Row (Band)" 211 + }, 212 + "instructions": { 213 + "en": "Secure band to an elevated object so that it is taut at shoulder level and hold the handles in both hands. Start in a squat position.||Push from the heels and midfoot to extend legs and simultaneously pull band handles in a rowing motion while exhaling.||Return to starting position while inhaling, keeping core tight.||Repeat for reps." 214 + }, 215 + "media": [ 216 + { 217 + "url": "https://files.strong.app/users/global/IMG21HX72M0y3.jpg", 218 + "type": "IMAGE", 219 + "contentType": "image/jpeg" 220 + }, 221 + { 222 + "url": "https://files.strong.app/users/global/THU21HX72M0y3%403x.png", 223 + "type": "THUMBNAIL", 224 + "contentType": "image/png" 225 + } 226 + ], 227 + "cellTypeConfigs": [ 228 + { 229 + "cellType": "REPS", 230 + "mandatory": true 231 + }, 232 + { 233 + "cellType": "RPE", 234 + "isExponent": true 235 + } 236 + ], 237 + "isGlobal": true, 238 + "measurementType": "EXERCISE" 239 + }, 240 + { 241 + "_links": { 242 + "self": { 243 + "href": "/api/measurements/99afdf73-0e2f-4f2d-a10d-90299196b0db" 244 + }, 245 + "tag": [ 246 + { 247 + "href": "/api/tags/legs" 248 + } 249 + ] 250 + }, 251 + "id": "99afdf73-0e2f-4f2d-a10d-90299196b0db", 252 + "created": "2018-04-27T09:35:09.053Z", 253 + "lastChanged": "2018-10-15T05:57:51.864Z", 254 + "name": { 255 + "en": "Squat (Machine)" 256 + }, 257 + "instructions": { 258 + "en": "Place feet shoulder width apart and slightly in front of the torso, and grip the handles.||While bracing your core and keeping chest up, push with the feet until the weight is supported by the shoulders. This is your starting position.||Slowly lower your body by breaking at the hips until the thighs and calves make a 90 degree angle.||When at the bottom of the movement, push through the heels and midfoot while exhaling to return to the starting position, making sure to keep your weight evenly distributed across your feet.||Repeat for reps." 259 + }, 260 + "media": [ 261 + { 262 + "url": "https://files.strong.app/users/global/IMG3oL8QpU0W8.jpg", 263 + "type": "IMAGE", 264 + "contentType": "image/jpeg" 265 + }, 266 + { 267 + "url": "https://files.strong.app/users/global/THU3oL8QpU0W8%403x.png", 268 + "type": "THUMBNAIL", 269 + "contentType": "image/png" 270 + } 271 + ], 272 + "cellTypeConfigs": [ 273 + { 274 + "cellType": "OTHER_WEIGHT", 275 + "mandatory": true 276 + }, 277 + { 278 + "cellType": "REPS", 279 + "mandatory": true 280 + }, 281 + { 282 + "cellType": "RPE", 283 + "isExponent": true 284 + } 285 + ], 286 + "isGlobal": true, 287 + "measurementType": "EXERCISE" 288 + }, 289 + { 290 + "_links": { 291 + "self": { 292 + "href": "/api/measurements/88b0165c-0c7c-423a-949d-0171baa354c2" 293 + }, 294 + "tag": [ 295 + { 296 + "href": "/api/tags/legs" 297 + } 298 + ] 299 + }, 300 + "id": "88b0165c-0c7c-423a-949d-0171baa354c2", 301 + "created": "2018-04-27T09:34:47.816Z", 302 + "lastChanged": "2018-10-15T05:37:06.966Z", 303 + "name": { 304 + "en": "Glute Kickback (Machine)" 305 + }, 306 + "instructions": { 307 + "en": "NOTE: Depending on your gym, the machine may look different, but the general instructions should remain the same.||Adjust the chest pads to the appropriate height.||Position your chest against the pads and grip the handles while placing one foot on the platform with your knees bent.||Kick back the platform and make sure you're using your glutes to push the weight back.||Once your leg is fully extended, hold the position for a brief moment and slowly return to the starting position.||Repeat for reps, then repeat for the other side." 308 + }, 309 + "media": [], 310 + "cellTypeConfigs": [ 311 + { 312 + "cellType": "OTHER_WEIGHT", 313 + "mandatory": true 314 + }, 315 + { 316 + "cellType": "REPS", 317 + "mandatory": true 318 + }, 319 + { 320 + "cellType": "RPE", 321 + "isExponent": true 322 + } 323 + ], 324 + "isGlobal": true, 325 + "measurementType": "EXERCISE" 326 + }, 327 + { 328 + "_links": { 329 + "self": { 330 + "href": "/api/measurements/231a78da-13dc-441d-ac31-03d5730e8168" 331 + }, 332 + "tag": [ 333 + { 334 + "href": "/api/tags/legs" 335 + } 336 + ] 337 + }, 338 + "id": "231a78da-13dc-441d-ac31-03d5730e8168", 339 + "created": "2018-04-27T09:32:45.492Z", 340 + "lastChanged": "2018-10-15T06:09:47.274Z", 341 + "name": { 342 + "en": "Seated Calf Raise (Machine)" 343 + }, 344 + "instructions": { 345 + "en": "NOTE: This exercise can be done with both legs at a time or one leg at a time.||Sit down on the calf raise machine and place your legs on the platform at a shoulder width foot stance.||Press the sled all the way out until your legs are fully extended without locking your knees.||Place your feet so that only your toes are on the platform and your heels are extending off the sled. This is your starting position.||Press on the sled by raising your heels and extending your ankles as high as possible and flexing your calf. Both of your knees should be kept stationary at all times.||Breathe in and go back to the starting position by lowering your heels as you bend the ankles until calves are stretched.||Repeat for reps." 346 + }, 347 + "media": [], 348 + "cellTypeConfigs": [ 349 + { 350 + "cellType": "OTHER_WEIGHT", 351 + "mandatory": true 352 + }, 353 + { 354 + "cellType": "REPS", 355 + "mandatory": true 356 + }, 357 + { 358 + "cellType": "RPE", 359 + "isExponent": true 360 + } 361 + ], 362 + "isGlobal": true, 363 + "measurementType": "EXERCISE" 364 + }, 365 + { 366 + "_links": { 367 + "self": { 368 + "href": "/api/measurements/04e2090c-a84e-47a1-81c5-55103b28ed2f" 369 + }, 370 + "tag": [ 371 + { 372 + "href": "/api/tags/chest" 373 + } 374 + ] 375 + }, 376 + "id": "04e2090c-a84e-47a1-81c5-55103b28ed2f", 377 + "created": "2018-04-27T09:31:27.262Z", 378 + "lastChanged": "2018-10-15T05:44:48.526Z", 379 + "name": { 380 + "en": "Pullover (Machine)" 381 + }, 382 + "instructions": { 383 + "en": "Adjust the machine for the appropriate height so that your elbows are placed directly on the pads when you sit down and extend your arms overhead.||Feel the stretch in your lats and slowly lower your hands down in front of you while squeezing your lats.||Slowly return to the starting position.||Repeat for reps." 384 + }, 385 + "media": [], 386 + "cellTypeConfigs": [ 387 + { 388 + "cellType": "OTHER_WEIGHT", 389 + "mandatory": true 390 + }, 391 + { 392 + "cellType": "REPS", 393 + "mandatory": true 394 + }, 395 + { 396 + "cellType": "RPE", 397 + "isExponent": true 398 + } 399 + ], 400 + "isGlobal": true, 401 + "measurementType": "EXERCISE" 402 + }, 403 + { 404 + "_links": { 405 + "self": { 406 + "href": "/api/measurements/6df7b87b-4467-43b6-9458-6ade61838823" 407 + }, 408 + "tag": [ 409 + { 410 + "href": "/api/tags/core" 411 + } 412 + ] 413 + }, 414 + "id": "6df7b87b-4467-43b6-9458-6ade61838823", 415 + "created": "2018-04-27T09:28:40.342Z", 416 + "lastChanged": "2018-10-15T05:40:34.315Z", 417 + "name": { 418 + "en": "Knees to Elbows" 419 + }, 420 + "instructions": { 421 + "en": "Grasp the pull up bar with a shoulder-width grip. You can perform this movement with your palms facing away from you or towards you. This is your starting position.||From the hanging position, bring both of your knees up so they make contact with your elbows.||Lower yourself down to the starting position.||Repeat for reps." 422 + }, 423 + "media": [ 424 + { 425 + "url": "https://files.strong.app/users/global/IMG1zr0rBKCMt.jpg", 426 + "type": "IMAGE", 427 + "contentType": "image/jpeg" 428 + }, 429 + { 430 + "url": "https://files.strong.app/users/global/THU1zr0rBKCMt%403x.png", 431 + "type": "THUMBNAIL", 432 + "contentType": "image/png" 433 + } 434 + ], 435 + "cellTypeConfigs": [ 436 + { 437 + "cellType": "REPS", 438 + "mandatory": true 439 + }, 440 + { 441 + "cellType": "RPE", 442 + "isExponent": true 443 + } 444 + ], 445 + "isGlobal": true, 446 + "measurementType": "EXERCISE" 447 + }, 448 + { 449 + "_links": { 450 + "self": { 451 + "href": "/api/measurements/402c550a-194e-4b58-a2ec-b12e5b404547" 452 + }, 453 + "tag": [ 454 + { 455 + "href": "/api/tags/full-body" 456 + } 457 + ] 458 + }, 459 + "id": "402c550a-194e-4b58-a2ec-b12e5b404547", 460 + "created": "2018-04-27T09:22:24.575Z", 461 + "lastChanged": "2018-09-27T08:56:38.354Z", 462 + "name": { 463 + "en": "Muscle Up" 464 + }, 465 + "instructions": { 466 + "en": "NOTE: You can perform this exercise on a pull up bar or rings. As this is a complex movement, we recommend consulting a trainer who is able to instruct you with the appropriate form and cues.||Grasp the bar at a slightly wider than shoulder width with your palms facing away from you. This is your starting position.||Pull yourself upward by retracting your scapula and bring your chest to the bar.||As you reach the top position, pull the bar towards your armpits and roll your shoulders forward to allow your elbows to move straight back behind you. Doing so should put you in the proper position to push yourself upwards into the dip portion of the movement.||Extend through the elbows until your arms are fully straight, then carefully lower yourself back down to the starting position.||Repeat for reps." 467 + }, 468 + "media": [ 469 + { 470 + "url": "https://files.strong.app/users/global/IMG3CIQJ2Axgu.jpg", 471 + "type": "IMAGE", 472 + "contentType": "image/jpeg" 473 + }, 474 + { 475 + "url": "https://files.strong.app/users/global/THU3CIQJ2Axgu%403x.png", 476 + "type": "THUMBNAIL", 477 + "contentType": "image/png" 478 + } 479 + ], 480 + "cellTypeConfigs": [ 481 + { 482 + "cellType": "WEIGHTED_BODYWEIGHT" 483 + }, 484 + { 485 + "cellType": "REPS", 486 + "mandatory": true 487 + }, 488 + { 489 + "cellType": "RPE", 490 + "isExponent": true 491 + } 492 + ], 493 + "isGlobal": true, 494 + "measurementType": "EXERCISE" 495 + }, 496 + { 497 + "_links": { 498 + "self": { 499 + "href": "/api/measurements/0373b862-bde8-4335-ab03-763cca57455c" 500 + }, 501 + "tag": [ 502 + { 503 + "href": "/api/tags/full-body" 504 + } 505 + ] 506 + }, 507 + "id": "0373b862-bde8-4335-ab03-763cca57455c", 508 + "created": "2018-04-27T08:54:12.638Z", 509 + "lastChanged": "2018-10-15T05:50:22.003Z", 510 + "name": { 511 + "en": "Ball Slams" 512 + }, 513 + "instructions": { 514 + "en": "Hold a medicine ball over your head with both hands and stand with your feet at shoulder width. This is your starting position.||Slam the ball into the ground directly in front you with as much force as you can.||Pick up the medicine ball and bring it back up overhead.||Repeat for reps." 515 + }, 516 + "media": [ 517 + { 518 + "url": "https://files.strong.app/users/global/IMG5QD729I5Fc.jpg", 519 + "type": "IMAGE", 520 + "contentType": "image/jpeg" 521 + }, 522 + { 523 + "url": "https://files.strong.app/users/global/THU5QD729I5Fc%403x.png", 524 + "type": "THUMBNAIL", 525 + "contentType": "image/png" 526 + } 527 + ], 528 + "cellTypeConfigs": [ 529 + { 530 + "cellType": "OTHER_WEIGHT", 531 + "mandatory": true 532 + }, 533 + { 534 + "cellType": "REPS", 535 + "mandatory": true 536 + }, 537 + { 538 + "cellType": "RPE", 539 + "isExponent": true 540 + } 541 + ], 542 + "isGlobal": true, 543 + "measurementType": "EXERCISE" 544 + }, 545 + { 546 + "_links": { 547 + "self": { 548 + "href": "/api/measurements/61f41123-654e-45b9-9c3b-fd4cbea9eaf0" 549 + }, 550 + "tag": [ 551 + { 552 + "href": "/api/tags/shoulders" 553 + } 554 + ] 555 + }, 556 + "id": "61f41123-654e-45b9-9c3b-fd4cbea9eaf0", 557 + "created": "2018-04-27T07:16:56.364Z", 558 + "lastChanged": "2018-09-27T09:09:21.278Z", 559 + "name": { 560 + "en": "Upright Row (Dumbbell)" 561 + }, 562 + "instructions": { 563 + "en": "Hold dumbbells with arms at shoulder width and grip with a pronated grip.||Use shoulders to lift the dumbbells as you exhale.||Elbows should lead movement and your hands should be close to the body as it is elevated.||Continue to lift until hands are at your chin level. Hold at this position as you contract the shoulder muscles.||Lower to starting position.||Repeat for reps." 564 + }, 565 + "media": [ 566 + { 567 + "url": "https://files.strong.app/users/global/IMG1eUsbxgWTB.jpg", 568 + "type": "IMAGE", 569 + "contentType": "image/jpeg" 570 + }, 571 + { 572 + "url": "https://files.strong.app/users/global/THU1eUsbxgWTB%403x.png", 573 + "type": "THUMBNAIL", 574 + "contentType": "image/png" 575 + } 576 + ], 577 + "cellTypeConfigs": [ 578 + { 579 + "cellType": "DUMBBELL_WEIGHT", 580 + "mandatory": true 581 + }, 582 + { 583 + "cellType": "REPS", 584 + "mandatory": true 585 + }, 586 + { 587 + "cellType": "RPE", 588 + "isExponent": true 589 + } 590 + ], 591 + "isGlobal": true, 592 + "measurementType": "EXERCISE" 593 + }, 594 + { 595 + "_links": { 596 + "self": { 597 + "href": "/api/measurements/b8b33683-ce46-4392-8be5-207fe8e605bd" 598 + }, 599 + "tag": [ 600 + { 601 + "href": "/api/tags/arms" 602 + } 603 + ] 604 + }, 605 + "id": "b8b33683-ce46-4392-8be5-207fe8e605bd", 606 + "created": "2018-04-27T07:16:49.458Z", 607 + "lastChanged": "2018-09-27T09:15:25.554Z", 608 + "name": { 609 + "en": "Upright Row (Cable)" 610 + }, 611 + "instructions": { 612 + "en": "Adjust the pulley height so that it's near the floor.||Grab the cable handles with your arms at shoulder width and grip them with a pronated grip.||Use shoulders to lift the weight up as you exhale.||Elbows should lead movement and the handles should be close to the body as it is elevated.||Continue to lift until hands are at your chin level. Hold at this position as you contract the shoulder muscles.||Lower to starting position.||Repeat for reps." 613 + }, 614 + "media": [ 615 + { 616 + "url": "https://files.strong.app/users/global/IMGkhcDDtHI64.jpg", 617 + "type": "IMAGE", 618 + "contentType": "image/jpeg" 619 + }, 620 + { 621 + "url": "https://files.strong.app/users/global/THUkhcDDtHI64%403x.png", 622 + "type": "THUMBNAIL", 623 + "contentType": "image/png" 624 + } 625 + ], 626 + "cellTypeConfigs": [ 627 + { 628 + "cellType": "OTHER_WEIGHT", 629 + "mandatory": true 630 + }, 631 + { 632 + "cellType": "REPS", 633 + "mandatory": true 634 + }, 635 + { 636 + "cellType": "RPE", 637 + "isExponent": true 638 + } 639 + ], 640 + "isGlobal": true, 641 + "measurementType": "EXERCISE" 642 + }, 643 + { 644 + "_links": { 645 + "self": { 646 + "href": "/api/measurements/0973c5dd-5b62-4e9e-a15e-114cb94f440d" 647 + }, 648 + "tag": [ 649 + { 650 + "href": "/api/tags/arms" 651 + } 652 + ] 653 + }, 654 + "id": "0973c5dd-5b62-4e9e-a15e-114cb94f440d", 655 + "created": "2018-04-27T07:16:42.194Z", 656 + "lastChanged": "2018-10-15T06:33:50.203Z", 657 + "name": { 658 + "en": "Triceps Extension (Machine)" 659 + }, 660 + "instructions": { 661 + "en": "Adjust the machine's seat to the appropriate height and select the appropriate weight. Place your upper arms against the machine's pads while gripping the handles. This is your starting position.||Extend at the elbow and lower the weight until your arms are fully extended.||Once your arms are fully extended, hold the position for a brief moment and slowly raise your arms back to the starting position.||Repeat for reps." 662 + }, 663 + "media": [ 664 + { 665 + "url": "https://files.strong.app/users/global/IMGEWm19pmMjX.jpg", 666 + "type": "IMAGE", 667 + "contentType": "image/jpeg" 668 + }, 669 + { 670 + "url": "https://files.strong.app/users/global/VIDEWm19pmMjX.mp4", 671 + "type": "VIDEO", 672 + "contentType": "video/mp4" 673 + }, 674 + { 675 + "url": "https://files.strong.app/users/global/THUEWm19pmMjX%403x.png", 676 + "type": "THUMBNAIL", 677 + "contentType": "image/png" 678 + } 679 + ], 680 + "cellTypeConfigs": [ 681 + { 682 + "cellType": "OTHER_WEIGHT", 683 + "mandatory": true 684 + }, 685 + { 686 + "cellType": "REPS", 687 + "mandatory": true 688 + }, 689 + { 690 + "cellType": "RPE", 691 + "isExponent": true 692 + } 693 + ], 694 + "isGlobal": true, 695 + "measurementType": "EXERCISE" 696 + }, 697 + { 698 + "_links": { 699 + "self": { 700 + "href": "/api/measurements/3718fbd6-a0e5-4d56-bb92-10feb3600156" 701 + }, 702 + "tag": [ 703 + { 704 + "href": "/api/tags/arms" 705 + } 706 + ] 707 + }, 708 + "id": "3718fbd6-a0e5-4d56-bb92-10feb3600156", 709 + "created": "2018-04-27T07:16:27.239Z", 710 + "lastChanged": "2018-10-15T06:33:45.467Z", 711 + "name": { 712 + "en": "Triceps Extension (Cable)" 713 + }, 714 + "instructions": { 715 + "en": "Attach a rope grip to the bottom pulley of the cable machine.||Grasp the rope with both hands and extend your hands directly above your head. Keep your elbows close to your head with your arms perpendicular to the floor. This is your starting position.||Slowly lower the rope behind your head as you keep your upper arms in place, and pause when your triceps are fully stretched.||Return to the starting position by flexing your triceps.||Repeat for reps." 716 + }, 717 + "media": [ 718 + { 719 + "url": "https://files.strong.app/users/global/IMGRemEUYjkoZ.jpg", 720 + "type": "IMAGE", 721 + "contentType": "image/jpeg" 722 + }, 723 + { 724 + "url": "https://files.strong.app/users/global/VIDRemEUYjkoZ.mp4", 725 + "type": "VIDEO", 726 + "contentType": "video/mp4" 727 + }, 728 + { 729 + "url": "https://files.strong.app/users/global/THURemEUYjkoZ%403x.png", 730 + "type": "THUMBNAIL", 731 + "contentType": "image/png" 732 + } 733 + ], 734 + "cellTypeConfigs": [ 735 + { 736 + "cellType": "OTHER_WEIGHT", 737 + "mandatory": true 738 + }, 739 + { 740 + "cellType": "REPS", 741 + "mandatory": true 742 + }, 743 + { 744 + "cellType": "RPE", 745 + "isExponent": true 746 + } 747 + ], 748 + "isGlobal": true, 749 + "measurementType": "EXERCISE" 750 + }, 751 + { 752 + "_links": { 753 + "self": { 754 + "href": "/api/measurements/d3560a25-828f-4f33-8624-6fc4875d3cca" 755 + }, 756 + "tag": [ 757 + { 758 + "href": "/api/tags/arms" 759 + } 760 + ] 761 + }, 762 + "id": "d3560a25-828f-4f33-8624-6fc4875d3cca", 763 + "created": "2018-04-27T07:16:20.539Z", 764 + "lastChanged": "2018-10-15T06:33:41.763Z", 765 + "name": { 766 + "en": "Triceps Extension (Barbell)" 767 + }, 768 + "instructions": { 769 + "en": "NOTE: This exercise can be performed while standing up or lying down on a flat bench.||Hold a barbell with both hands over head with arms fully extended.||Lower the dumbbell in a circular motion behind the head until the forearms touch the biceps.||Return to the starting position by flexing the triceps.||Repeat for reps." 770 + }, 771 + "media": [ 772 + { 773 + "url": "https://files.strong.app/users/global/IMGwkhndb6Af4.jpg", 774 + "type": "IMAGE", 775 + "contentType": "image/jpeg" 776 + }, 777 + { 778 + "url": "https://files.strong.app/users/global/VIDwkhndb6Af4.mp4", 779 + "type": "VIDEO", 780 + "contentType": "video/mp4" 781 + }, 782 + { 783 + "url": "https://files.strong.app/users/global/THUwkhndb6Af4%403x.png", 784 + "type": "THUMBNAIL", 785 + "contentType": "image/png" 786 + } 787 + ], 788 + "cellTypeConfigs": [ 789 + { 790 + "cellType": "BARBELL_WEIGHT", 791 + "mandatory": true 792 + }, 793 + { 794 + "cellType": "REPS", 795 + "mandatory": true 796 + }, 797 + { 798 + "cellType": "RPE", 799 + "isExponent": true 800 + } 801 + ], 802 + "isGlobal": true, 803 + "measurementType": "EXERCISE" 804 + }, 805 + { 806 + "_links": { 807 + "self": { 808 + "href": "/api/measurements/933a3dbf-b9c2-40f9-852f-cd2b26dd9eb1" 809 + }, 810 + "tag": [ 811 + { 812 + "href": "/api/tags/arms" 813 + } 814 + ] 815 + }, 816 + "id": "933a3dbf-b9c2-40f9-852f-cd2b26dd9eb1", 817 + "created": "2018-04-27T07:16:14.451Z", 818 + "lastChanged": "2018-10-15T06:33:37.591Z", 819 + "name": { 820 + "en": "Triceps Dip (Assisted)" 821 + }, 822 + "instructions": { 823 + "en": "Hold your body with arms extended above the dip bars and place your knees on the assistance pad. This is your starting position.||Slowly lower your body while keeping your upper arms as close to your body and your torso as upright as possible. Lower yourself until there's a 90 degree angle between your upper arm and forearms.||Briefly hold the position at the bottom of the movement, then push yourself upwards using your triceps to bring yourself back to the starting position.||Repeat for reps." 824 + }, 825 + "media": [ 826 + { 827 + "url": "https://files.strong.app/users/global/IMGioCO1kXB9v.jpg", 828 + "type": "IMAGE", 829 + "contentType": "image/jpeg" 830 + }, 831 + { 832 + "url": "https://files.strong.app/users/global/THUioCO1kXB9v%403x.png", 833 + "type": "THUMBNAIL", 834 + "contentType": "image/png" 835 + } 836 + ], 837 + "cellTypeConfigs": [ 838 + { 839 + "cellType": "OTHER_WEIGHT", 840 + "mandatory": true 841 + }, 842 + { 843 + "cellType": "REPS", 844 + "mandatory": true 845 + }, 846 + { 847 + "cellType": "RPE", 848 + "isExponent": true 849 + } 850 + ], 851 + "isGlobal": true, 852 + "measurementType": "EXERCISE" 853 + }, 854 + { 855 + "_links": { 856 + "self": { 857 + "href": "/api/measurements/57f573f8-f797-4483-bc1f-5911a70463a6" 858 + }, 859 + "tag": [ 860 + { 861 + "href": "/api/tags/legs" 862 + } 863 + ] 864 + }, 865 + "id": "57f573f8-f797-4483-bc1f-5911a70463a6", 866 + "created": "2018-04-27T07:15:54.786Z", 867 + "lastChanged": "2018-09-27T09:15:17.868Z", 868 + "name": { 869 + "en": "Trap Bar Deadlift" 870 + }, 871 + "instructions": { 872 + "en": "Load a trap bar (also known as a hex bar) with an appropriate weight.||Stand in the center of the apparatus and grasp both handles.||Lower your hips while keeping your back straight at all times and your head looking forward. This is your starting position.||Stand up by driving your feet through the ground and extending your hips and your knees. Be careful to avoid any form of back rounding at all times.||Briefly pause at the top of the lift, then return to starting position -- be sure to bend your knees only after the bar has traveled past them.||Repeat for reps." 873 + }, 874 + "media": [ 875 + { 876 + "url": "https://files.strong.app/users/global/IMGEYdTVRiRNC.jpg", 877 + "type": "IMAGE", 878 + "contentType": "image/jpeg" 879 + }, 880 + { 881 + "url": "https://files.strong.app/users/global/VIDEYdTVRiRNC.mp4", 882 + "type": "VIDEO", 883 + "contentType": "video/mp4" 884 + }, 885 + { 886 + "url": "https://files.strong.app/users/global/THUEYdTVRiRNC%403x.png", 887 + "type": "THUMBNAIL", 888 + "contentType": "image/png" 889 + } 890 + ], 891 + "cellTypeConfigs": [ 892 + { 893 + "cellType": "BARBELL_WEIGHT", 894 + "mandatory": true 895 + }, 896 + { 897 + "cellType": "REPS", 898 + "mandatory": true 899 + }, 900 + { 901 + "cellType": "RPE", 902 + "isExponent": true 903 + } 904 + ], 905 + "isGlobal": true, 906 + "measurementType": "EXERCISE" 907 + }, 908 + { 909 + "_links": { 910 + "self": { 911 + "href": "/api/measurements/42695e60-4dd7-41a0-8233-c26b1fe24e6e" 912 + }, 913 + "tag": [ 914 + { 915 + "href": "/api/tags/core" 916 + } 917 + ] 918 + }, 919 + "id": "42695e60-4dd7-41a0-8233-c26b1fe24e6e", 920 + "created": "2018-04-27T07:15:41.864Z", 921 + "lastChanged": "2018-09-27T09:15:13.047Z", 922 + "name": { 923 + "en": "Torso Rotation (Machine)" 924 + }, 925 + "instructions": { 926 + "en": "Adjust the chest support padding to the appropriate height so that it's placed directly across the middle of your chest as you kneel down on the platform. This is your starting position.||Grip the handles and rotate your torso to the right.||Repeat for reps, then adjust the machine for the opposite side and repeat the movement." 927 + }, 928 + "media": [], 929 + "cellTypeConfigs": [ 930 + { 931 + "cellType": "OTHER_WEIGHT", 932 + "mandatory": true 933 + }, 934 + { 935 + "cellType": "REPS", 936 + "mandatory": true 937 + }, 938 + { 939 + "cellType": "RPE", 940 + "isExponent": true 941 + } 942 + ], 943 + "isGlobal": true, 944 + "measurementType": "EXERCISE" 945 + }, 946 + { 947 + "_links": { 948 + "self": { 949 + "href": "/api/measurements/00980376-619e-4898-b27c-1dde6faa0daa" 950 + }, 951 + "tag": [ 952 + { 953 + "href": "/api/tags/legs" 954 + } 955 + ] 956 + }, 957 + "id": "00980376-619e-4898-b27c-1dde6faa0daa", 958 + "created": "2018-04-27T07:15:19.389Z", 959 + "lastChanged": "2018-10-15T06:33:27.219Z", 960 + "name": { 961 + "en": "Stiff Leg Deadlift (Dumbbell)" 962 + }, 963 + "instructions": { 964 + "en": "NOTE: People with poor hamstring flexibility might find this exercise difficult to perform. If this sounds like you, consider the Romanian Deadlift (Dumbbell) instead.||Stand with the dumbbells in front of your thighs and place feet shoulder width apart.||Take a deep breath and brace your core.||While keeping your knees stationary and your legs as straight as possible, bend at the waist and push your glutes out while keeping your back straight. You should feel a stretch in your hamstrings.||Once you can no longer go any lower, stand back up by straightening the torso.||Repeat for reps." 965 + }, 966 + "media": [ 967 + { 968 + "url": "https://files.strong.app/users/global/IMGmTR82jiD2w.jpg", 969 + "type": "IMAGE", 970 + "contentType": "image/jpeg" 971 + }, 972 + { 973 + "url": "https://files.strong.app/users/global/THUmTR82jiD2w%403x.png", 974 + "type": "THUMBNAIL", 975 + "contentType": "image/png" 976 + } 977 + ], 978 + "cellTypeConfigs": [ 979 + { 980 + "cellType": "DUMBBELL_WEIGHT", 981 + "mandatory": true 982 + }, 983 + { 984 + "cellType": "REPS", 985 + "mandatory": true 986 + }, 987 + { 988 + "cellType": "RPE", 989 + "isExponent": true 990 + } 991 + ], 992 + "isGlobal": true, 993 + "measurementType": "EXERCISE" 994 + }, 995 + { 996 + "_links": { 997 + "self": { 998 + "href": "/api/measurements/14263e88-13d4-4582-9b18-423a36631645" 999 + }, 1000 + "tag": [ 1001 + { 1002 + "href": "/api/tags/legs" 1003 + } 1004 + ] 1005 + }, 1006 + "id": "14263e88-13d4-4582-9b18-423a36631645", 1007 + "created": "2018-04-27T07:15:12.094Z", 1008 + "lastChanged": "2018-09-27T09:15:06.307Z", 1009 + "name": { 1010 + "en": "Standing Calf Raise (Smith Machine)" 1011 + }, 1012 + "instructions": { 1013 + "en": "NOTE: You can perform this exercise while standing on an elevated platform to get an additional stretch at the bottom or with your feet flat on the ground.||Grab the bar so that your arms are hanging down straight with the bar in front of your thighs. Alternately, you can also place the bar on your shoulders.||Stand upright with the torso erect, knees slightly bent.||Raise heels as you breathe out, contracting calves at the top.||Lower slowly back to the starting position.||Repeat for reps." 1014 + }, 1015 + "media": [ 1016 + { 1017 + "url": "https://files.strong.app/users/global/IMGF0pHgvERle.jpg", 1018 + "type": "IMAGE", 1019 + "contentType": "image/jpeg" 1020 + }, 1021 + { 1022 + "url": "https://files.strong.app/users/global/VIDF0pHgvERle.mp4", 1023 + "type": "VIDEO", 1024 + "contentType": "video/mp4" 1025 + }, 1026 + { 1027 + "url": "https://files.strong.app/users/global/THUF0pHgvERle%403x.png", 1028 + "type": "THUMBNAIL", 1029 + "contentType": "image/png" 1030 + } 1031 + ], 1032 + "cellTypeConfigs": [ 1033 + { 1034 + "cellType": "OTHER_WEIGHT", 1035 + "mandatory": true 1036 + }, 1037 + { 1038 + "cellType": "REPS", 1039 + "mandatory": true 1040 + }, 1041 + { 1042 + "cellType": "RPE", 1043 + "isExponent": true 1044 + } 1045 + ], 1046 + "isGlobal": true, 1047 + "measurementType": "EXERCISE" 1048 + }, 1049 + { 1050 + "_links": { 1051 + "self": { 1052 + "href": "/api/measurements/4a52954f-4354-4da6-81be-fff191f29f91" 1053 + }, 1054 + "tag": [ 1055 + { 1056 + "href": "/api/tags/legs" 1057 + } 1058 + ] 1059 + }, 1060 + "id": "4a52954f-4354-4da6-81be-fff191f29f91", 1061 + "created": "2018-04-27T07:15:05.023Z", 1062 + "lastChanged": "2018-09-27T09:14:58.312Z", 1063 + "name": { 1064 + "en": "Standing Calf Raise (Bodyweight)" 1065 + }, 1066 + "instructions": { 1067 + "en": "Stand with the ball of the foot on a platform 2 to 3 inches from the floor. Alternatively, you can also perform this exercise with your feet flat on the ground.||Start with the heel touching the floor, flexing the calf.||Raise the heels off the floor and exhale as you contract the calves.||Inhale and return to the starting position.||Repeat for reps." 1068 + }, 1069 + "media": [ 1070 + { 1071 + "url": "https://files.strong.app/users/global/IMGcnSstO4hIp.jpg", 1072 + "type": "IMAGE", 1073 + "contentType": "image/jpeg" 1074 + }, 1075 + { 1076 + "url": "https://files.strong.app/users/global/THUcnSstO4hIp%403x.png", 1077 + "type": "THUMBNAIL", 1078 + "contentType": "image/png" 1079 + } 1080 + ], 1081 + "cellTypeConfigs": [ 1082 + { 1083 + "cellType": "REPS", 1084 + "mandatory": true 1085 + }, 1086 + { 1087 + "cellType": "RPE", 1088 + "isExponent": true 1089 + } 1090 + ], 1091 + "isGlobal": true, 1092 + "measurementType": "EXERCISE" 1093 + }, 1094 + { 1095 + "_links": { 1096 + "self": { 1097 + "href": "/api/measurements/2abae8f2-b1cc-497c-af76-1c8e88ae3bf6" 1098 + }, 1099 + "tag": [ 1100 + { 1101 + "href": "/api/tags/legs" 1102 + } 1103 + ] 1104 + }, 1105 + "id": "2abae8f2-b1cc-497c-af76-1c8e88ae3bf6", 1106 + "created": "2018-04-27T07:14:57.798Z", 1107 + "lastChanged": "2018-09-27T09:15:01.095Z", 1108 + "name": { 1109 + "en": "Standing Calf Raise (Barbell)" 1110 + }, 1111 + "instructions": { 1112 + "en": "Place the barbell on your shoulder.||Stand with the ball of the foot on a platform 2 to 3 inches from the floor. Alternatively, you can also perform this exercise with your feet flat on the ground.||Start with the heel touching the floor, flexing the calf.||Raise the heels off the floor and exhale as you contract the calves.||Inhale and return to the starting position.||Repeat for reps." 1113 + }, 1114 + "media": [ 1115 + { 1116 + "url": "https://files.strong.app/users/global/IMGHm3EphT8o4.jpg", 1117 + "type": "IMAGE", 1118 + "contentType": "image/jpeg" 1119 + }, 1120 + { 1121 + "url": "https://files.strong.app/users/global/THUHm3EphT8o4%403x.png", 1122 + "type": "THUMBNAIL", 1123 + "contentType": "image/png" 1124 + } 1125 + ], 1126 + "cellTypeConfigs": [ 1127 + { 1128 + "cellType": "BARBELL_WEIGHT", 1129 + "mandatory": true 1130 + }, 1131 + { 1132 + "cellType": "REPS", 1133 + "mandatory": true 1134 + }, 1135 + { 1136 + "cellType": "RPE", 1137 + "isExponent": true 1138 + } 1139 + ], 1140 + "isGlobal": true, 1141 + "measurementType": "EXERCISE" 1142 + }, 1143 + { 1144 + "_links": { 1145 + "self": { 1146 + "href": "/api/measurements/fc0eaffb-e4d3-433e-8c19-7be1fdb0b0dc" 1147 + }, 1148 + "tag": [ 1149 + { 1150 + "href": "/api/tags/olympic" 1151 + } 1152 + ] 1153 + }, 1154 + "id": "fc0eaffb-e4d3-433e-8c19-7be1fdb0b0dc", 1155 + "created": "2018-04-27T07:14:50.907Z", 1156 + "lastChanged": "2018-10-15T06:33:18.298Z", 1157 + "name": { 1158 + "en": "Snatch Pull (Barbell)" 1159 + }, 1160 + "instructions": { 1161 + "en": "NOTE: As this is a complex movement, we recommend consulting a trainer who is able to instruct you with the appropriate form and cues.||Place a barbell on the floor and stand so that the bar is directly under your midfoot.||Lower your hips, take a wide grip on the barbell, and keep your torso straight with your chest up and head facing forward. This is your starting position.||Initiate the first pull by standing up with the bar by extending your hips and your knees and driving through your knees. Note that your back angle should remain constant and your arms should remain straight.||The second pull beings once the bar approaches the middle of your thighs -- in a jumping motion (but without your feet actually leaving the floor), accelerate the bar upwards by continuing to extend your hips, knees, and ankles.||Near the end of the second pull, continue to move the bar your torso should be fully upright. You shouldn't need to actively pull the bar upwards with your arms to accelerate the weight.||Quickly lower the bar back down to the middle of your thighs.||Lower the barbell back to the starting position.||Repeat for reps." 1162 + }, 1163 + "media": [ 1164 + { 1165 + "url": "https://files.strong.app/users/global/IMGtDblhrvToh.jpg", 1166 + "type": "IMAGE", 1167 + "contentType": "image/jpeg" 1168 + }, 1169 + { 1170 + "url": "https://files.strong.app/users/global/THUtDblhrvToh%403x.png", 1171 + "type": "THUMBNAIL", 1172 + "contentType": "image/png" 1173 + } 1174 + ], 1175 + "cellTypeConfigs": [ 1176 + { 1177 + "cellType": "BARBELL_WEIGHT", 1178 + "mandatory": true 1179 + }, 1180 + { 1181 + "cellType": "REPS", 1182 + "mandatory": true 1183 + }, 1184 + { 1185 + "cellType": "RPE", 1186 + "isExponent": true 1187 + } 1188 + ], 1189 + "isGlobal": true, 1190 + "measurementType": "EXERCISE" 1191 + }, 1192 + { 1193 + "_links": { 1194 + "self": { 1195 + "href": "/api/measurements/79f272a9-2d7f-4df0-ac75-d7d973f1df25" 1196 + }, 1197 + "tag": [ 1198 + { 1199 + "href": "/api/tags/core" 1200 + } 1201 + ] 1202 + }, 1203 + "id": "79f272a9-2d7f-4df0-ac75-d7d973f1df25", 1204 + "created": "2018-04-27T07:14:43.365Z", 1205 + "lastChanged": "2018-10-15T06:33:11.992Z", 1206 + "name": { 1207 + "en": "Side Bend (Dumbbell)" 1208 + }, 1209 + "instructions": { 1210 + "en": "NOTE: A common mistake many people make is to hold a dumbbell with both hands. When performing this movement, be sure to hold a dumbbell in one hand only, then switch hands after performing the desired amount of reps.||Stand up straight while holding a dumbbell on the left hand with your palms facing your torso. Place your right hand on your waist. This will be your starting position.||Bend at the waist to the right as far as possible, all while making sure your back is straight, then come back to the starting position.||Repeat the movement, but bend to the left instead, then return to the starting position.||Repeat for reps." 1211 + }, 1212 + "media": [ 1213 + { 1214 + "url": "https://files.strong.app/users/global/IMGpzjSpXJTvu.jpg", 1215 + "type": "IMAGE", 1216 + "contentType": "image/jpeg" 1217 + }, 1218 + { 1219 + "url": "https://files.strong.app/users/global/THUpzjSpXJTvu%403x.png", 1220 + "type": "THUMBNAIL", 1221 + "contentType": "image/png" 1222 + } 1223 + ], 1224 + "cellTypeConfigs": [ 1225 + { 1226 + "cellType": "DUMBBELL_WEIGHT", 1227 + "mandatory": true 1228 + }, 1229 + { 1230 + "cellType": "REPS", 1231 + "mandatory": true 1232 + }, 1233 + { 1234 + "cellType": "RPE", 1235 + "isExponent": true 1236 + } 1237 + ], 1238 + "isGlobal": true, 1239 + "measurementType": "EXERCISE" 1240 + }, 1241 + { 1242 + "_links": { 1243 + "self": { 1244 + "href": "/api/measurements/1edc86ac-5c4a-46b4-a29b-04141141ff6b" 1245 + }, 1246 + "tag": [ 1247 + { 1248 + "href": "/api/tags/core" 1249 + } 1250 + ] 1251 + }, 1252 + "id": "1edc86ac-5c4a-46b4-a29b-04141141ff6b", 1253 + "created": "2018-04-27T07:14:35.21Z", 1254 + "lastChanged": "2018-10-15T06:33:08.923Z", 1255 + "name": { 1256 + "en": "Side Bend (Cable)" 1257 + }, 1258 + "instructions": { 1259 + "en": "Adjust the pulley height so that it's almost at floor level. With the machine to your side, grab the cable attachment with your nearest arm by bending at the waist. This is your starting position.||Pull on the cable through your waist so your torso leans away from the pulley until your torso is straight.||Slowly lower the weight and return to the starting position by leaning your torso towards the pulley.||Repeat for reps, then continue with the opposite side." 1260 + }, 1261 + "media": [ 1262 + { 1263 + "url": "https://files.strong.app/users/global/IMGuodPjbv9AD.jpg", 1264 + "type": "IMAGE", 1265 + "contentType": "image/jpeg" 1266 + }, 1267 + { 1268 + "url": "https://files.strong.app/users/global/THUuodPjbv9AD%403x.png", 1269 + "type": "THUMBNAIL", 1270 + "contentType": "image/png" 1271 + } 1272 + ], 1273 + "cellTypeConfigs": [ 1274 + { 1275 + "cellType": "OTHER_WEIGHT", 1276 + "mandatory": true 1277 + }, 1278 + { 1279 + "cellType": "REPS", 1280 + "mandatory": true 1281 + }, 1282 + { 1283 + "cellType": "RPE", 1284 + "isExponent": true 1285 + } 1286 + ], 1287 + "isGlobal": true, 1288 + "measurementType": "EXERCISE" 1289 + }, 1290 + { 1291 + "_links": { 1292 + "self": { 1293 + "href": "/api/measurements/3e15b3fa-bd04-49ff-a622-633208a2d5df" 1294 + }, 1295 + "tag": [ 1296 + { 1297 + "href": "/api/tags/back" 1298 + } 1299 + ] 1300 + }, 1301 + "id": "3e15b3fa-bd04-49ff-a622-633208a2d5df", 1302 + "created": "2018-04-27T07:14:27.818Z", 1303 + "lastChanged": "2018-10-15T06:32:57.412Z", 1304 + "name": { 1305 + "en": "Shrug (Machine)" 1306 + }, 1307 + "instructions": { 1308 + "en": "Hold the machine grips with pronated grip at shoulder width.||While exhaling, contract the trap muscles and elevate the bar.||Hold at the upper position and lower back to the starting position while exhaling.||Repeat for reps." 1309 + }, 1310 + "media": [ 1311 + { 1312 + "url": "https://files.strong.app/users/global/IMGnDh8Us74T8.jpg", 1313 + "type": "IMAGE", 1314 + "contentType": "image/jpeg" 1315 + }, 1316 + { 1317 + "url": "https://files.strong.app/users/global/VIDnDh8Us74T8.mp4", 1318 + "type": "VIDEO", 1319 + "contentType": "video/mp4" 1320 + }, 1321 + { 1322 + "url": "https://files.strong.app/users/global/THUnDh8Us74T8%403x.png", 1323 + "type": "THUMBNAIL", 1324 + "contentType": "image/png" 1325 + } 1326 + ], 1327 + "cellTypeConfigs": [ 1328 + { 1329 + "cellType": "OTHER_WEIGHT", 1330 + "mandatory": true 1331 + }, 1332 + { 1333 + "cellType": "REPS", 1334 + "mandatory": true 1335 + }, 1336 + { 1337 + "cellType": "RPE", 1338 + "isExponent": true 1339 + } 1340 + ], 1341 + "isGlobal": true, 1342 + "measurementType": "EXERCISE" 1343 + }, 1344 + { 1345 + "_links": { 1346 + "self": { 1347 + "href": "/api/measurements/534954cb-6720-45c4-bf63-a0766142ec6c" 1348 + }, 1349 + "tag": [ 1350 + { 1351 + "href": "/api/tags/back" 1352 + } 1353 + ] 1354 + }, 1355 + "id": "534954cb-6720-45c4-bf63-a0766142ec6c", 1356 + "created": "2018-04-27T07:14:21.047Z", 1357 + "lastChanged": "2018-09-27T09:14:44.194Z", 1358 + "name": { 1359 + "en": "Seated Row (Machine)" 1360 + }, 1361 + "instructions": { 1362 + "en": "Grip the machine handles with both hands and sit with chest upright and back straight.||With shoulders retracted, pull the handle towards the mid torso.||Squeeze the back muscles as the handle approaches the torso and hold before returning to the starting position.||Repeat for reps." 1363 + }, 1364 + "media": [ 1365 + { 1366 + "url": "https://files.strong.app/users/global/IMGqg1ric4s1t.jpg", 1367 + "type": "IMAGE", 1368 + "contentType": "image/jpeg" 1369 + }, 1370 + { 1371 + "url": "https://files.strong.app/users/global/VIDqg1ric4s1t.mp4", 1372 + "type": "VIDEO", 1373 + "contentType": "video/mp4" 1374 + }, 1375 + { 1376 + "url": "https://files.strong.app/users/global/THUqg1ric4s1t%403x.png", 1377 + "type": "THUMBNAIL", 1378 + "contentType": "image/png" 1379 + } 1380 + ], 1381 + "cellTypeConfigs": [ 1382 + { 1383 + "cellType": "OTHER_WEIGHT", 1384 + "mandatory": true 1385 + }, 1386 + { 1387 + "cellType": "REPS", 1388 + "mandatory": true 1389 + }, 1390 + { 1391 + "cellType": "RPE", 1392 + "isExponent": true 1393 + } 1394 + ], 1395 + "isGlobal": true, 1396 + "measurementType": "EXERCISE" 1397 + }, 1398 + { 1399 + "_links": { 1400 + "self": { 1401 + "href": "/api/measurements/045d89bc-900c-444f-b72a-3852a05ef78f" 1402 + }, 1403 + "tag": [ 1404 + { 1405 + "href": "/api/tags/legs" 1406 + } 1407 + ] 1408 + }, 1409 + "id": "045d89bc-900c-444f-b72a-3852a05ef78f", 1410 + "created": "2018-04-27T07:14:05.816Z", 1411 + "lastChanged": "2018-09-27T09:14:36.681Z", 1412 + "name": { 1413 + "en": "Romanian Deadlift (Dumbbell)" 1414 + }, 1415 + "instructions": { 1416 + "en": "Stand with shoulder width or narrower stance and grasp dumbbells from the rack, or deadlift from floor with shoulder width to wide overhand grip. This is your starting position.||Lower bar toward top of feet by bending hips while tracing front contour of legs through downward motion. Gradually bend knees through descent and keep your spine straight.||Once your hamstrings are fully stretched, return to the starting position by extending hips and knees until standing upright. Pull shoulders back slightly if rounded.||Repeat for reps." 1417 + }, 1418 + "media": [ 1419 + { 1420 + "url": "https://files.strong.app/users/global/IMGvIShAdvKvL.jpg", 1421 + "type": "IMAGE", 1422 + "contentType": "image/jpeg" 1423 + }, 1424 + { 1425 + "url": "https://files.strong.app/users/global/VIDvIShAdvKvL.mp4", 1426 + "type": "VIDEO", 1427 + "contentType": "video/mp4" 1428 + }, 1429 + { 1430 + "url": "https://files.strong.app/users/global/THUvIShAdvKvL%403x.png", 1431 + "type": "THUMBNAIL", 1432 + "contentType": "image/png" 1433 + } 1434 + ], 1435 + "cellTypeConfigs": [ 1436 + { 1437 + "cellType": "DUMBBELL_WEIGHT", 1438 + "mandatory": true 1439 + }, 1440 + { 1441 + "cellType": "REPS", 1442 + "mandatory": true 1443 + }, 1444 + { 1445 + "cellType": "RPE", 1446 + "isExponent": true 1447 + } 1448 + ], 1449 + "isGlobal": true, 1450 + "measurementType": "EXERCISE" 1451 + }, 1452 + { 1453 + "_links": { 1454 + "self": { 1455 + "href": "/api/measurements/8dc8a29b-674b-43c9-bf6e-46b95f3414be" 1456 + }, 1457 + "tag": [ 1458 + { 1459 + "href": "/api/tags/shoulders" 1460 + } 1461 + ] 1462 + }, 1463 + "id": "8dc8a29b-674b-43c9-bf6e-46b95f3414be", 1464 + "created": "2018-04-27T07:13:59.315Z", 1465 + "lastChanged": "2018-09-27T09:14:28.128Z", 1466 + "name": { 1467 + "en": "Reverse Fly (Machine)" 1468 + }, 1469 + "instructions": { 1470 + "en": "Adjust the machine handles so that they are placed in front of you, and adjust the seat height so the handles are at shoulder level.||Grip the handles and make sure your arms are fully extended. This is your starting position.||Pull your hands out to the side and backwards, forming a semi-circular pattern. Focus on moving the weight with your rear delts.||Once your arms are fully extended to your side, hold the position for a brief moment and slowly return to the starting position.||Repeat for reps." 1471 + }, 1472 + "media": [ 1473 + { 1474 + "url": "https://files.strong.app/users/global/THUf9oYdoIaWy%403x.png", 1475 + "type": "THUMBNAIL", 1476 + "contentType": "image/png" 1477 + } 1478 + ], 1479 + "cellTypeConfigs": [ 1480 + { 1481 + "cellType": "OTHER_WEIGHT", 1482 + "mandatory": true 1483 + }, 1484 + { 1485 + "cellType": "REPS", 1486 + "mandatory": true 1487 + }, 1488 + { 1489 + "cellType": "RPE", 1490 + "isExponent": true 1491 + } 1492 + ], 1493 + "isGlobal": true, 1494 + "measurementType": "EXERCISE" 1495 + }, 1496 + { 1497 + "_links": { 1498 + "self": { 1499 + "href": "/api/measurements/edd6d6dd-2605-414a-bf0d-5ac3e41b8c06" 1500 + }, 1501 + "tag": [ 1502 + { 1503 + "href": "/api/tags/shoulders" 1504 + } 1505 + ] 1506 + }, 1507 + "id": "edd6d6dd-2605-414a-bf0d-5ac3e41b8c06", 1508 + "created": "2018-04-27T07:13:52.511Z", 1509 + "lastChanged": "2018-09-27T09:14:24.327Z", 1510 + "name": { 1511 + "en": "Reverse Fly (Dumbbell)" 1512 + }, 1513 + "instructions": { 1514 + "en": "NOTE: This exercise can be done one arm at a time or two arms at the same time.||Adjust the bench so that it's at a 30 to 45 degree angle and lie down on the bench with your chest and torso pressing into the bench.||Hold a dumbbell on each hand and let your arms hang down with a slight bend at your elbows. This is your starting position.||Squeeze your shoulder blades together and move the weights out and away from each other to the side in an arc motion while exhaling.||Pause at the top when your arms are parallel to the floor, then return to the starting position.||Repeat for reps." 1515 + }, 1516 + "media": [ 1517 + { 1518 + "url": "https://files.strong.app/users/global/IMGoCsoHBYJDf.jpg", 1519 + "type": "IMAGE", 1520 + "contentType": "image/jpeg" 1521 + }, 1522 + { 1523 + "url": "https://files.strong.app/users/global/VIDoCsoHBYJDf.mp4", 1524 + "type": "VIDEO", 1525 + "contentType": "video/mp4" 1526 + }, 1527 + { 1528 + "url": "https://files.strong.app/users/global/THUoCsoHBYJDf%403x.png", 1529 + "type": "THUMBNAIL", 1530 + "contentType": "image/png" 1531 + } 1532 + ], 1533 + "cellTypeConfigs": [ 1534 + { 1535 + "cellType": "DUMBBELL_WEIGHT", 1536 + "mandatory": true 1537 + }, 1538 + { 1539 + "cellType": "REPS", 1540 + "mandatory": true 1541 + }, 1542 + { 1543 + "cellType": "RPE", 1544 + "isExponent": true 1545 + } 1546 + ], 1547 + "isGlobal": true, 1548 + "measurementType": "EXERCISE" 1549 + }, 1550 + { 1551 + "_links": { 1552 + "self": { 1553 + "href": "/api/measurements/56f23487-1b65-4d4e-bcba-9d7a424110ef" 1554 + }, 1555 + "tag": [ 1556 + { 1557 + "href": "/api/tags/shoulders" 1558 + } 1559 + ] 1560 + }, 1561 + "id": "56f23487-1b65-4d4e-bcba-9d7a424110ef", 1562 + "created": "2018-04-27T07:13:45.418Z", 1563 + "lastChanged": "2018-09-27T09:14:20.736Z", 1564 + "name": { 1565 + "en": "Reverse Fly (Cable)" 1566 + }, 1567 + "instructions": { 1568 + "en": "Adjust the pulleys so that the handles are at chest height.||Reach across your body and grab the left handle with your right hand, and grab the right handle with your left hand.||Position your arms straight ahead while holding onto each handle. This is your starting position.||Pull on the handles by moving your hands out to the side and back, and focusing on pulling the weight using your rear delts.||Once fully extended to the side, hold the position for a brief moment and slowly return to the starting position.||Repeat for reps." 1569 + }, 1570 + "media": [ 1571 + { 1572 + "url": "https://files.strong.app/users/global/IMGlEoprkFYZo.jpg", 1573 + "type": "IMAGE", 1574 + "contentType": "image/jpeg" 1575 + }, 1576 + { 1577 + "url": "https://files.strong.app/users/global/THUlEoprkFYZo%403x.png", 1578 + "type": "THUMBNAIL", 1579 + "contentType": "image/png" 1580 + } 1581 + ], 1582 + "cellTypeConfigs": [ 1583 + { 1584 + "cellType": "OTHER_WEIGHT", 1585 + "mandatory": true 1586 + }, 1587 + { 1588 + "cellType": "REPS", 1589 + "mandatory": true 1590 + }, 1591 + { 1592 + "cellType": "RPE", 1593 + "isExponent": true 1594 + } 1595 + ], 1596 + "isGlobal": true, 1597 + "measurementType": "EXERCISE" 1598 + }, 1599 + { 1600 + "_links": { 1601 + "self": { 1602 + "href": "/api/measurements/26c6975a-b7f5-4eec-8129-527a07a59d73" 1603 + }, 1604 + "tag": [ 1605 + { 1606 + "href": "/api/tags/arms" 1607 + } 1608 + ] 1609 + }, 1610 + "id": "26c6975a-b7f5-4eec-8129-527a07a59d73", 1611 + "created": "2018-04-27T07:13:38.677Z", 1612 + "lastChanged": "2018-10-15T06:32:45.934Z", 1613 + "name": { 1614 + "en": "Reverse Curl (Band)" 1615 + }, 1616 + "instructions": { 1617 + "en": "Stand with bands under the midfoot and with elbows touching the side of the torso. Grasp the handles with a pronated grip.||Using biceps, pull forearms and hands upward until fully contracted.||Squeeze biceps and slowly lower back to the starting position.||Repeat for reps." 1618 + }, 1619 + "media": [ 1620 + { 1621 + "url": "https://files.strong.app/users/global/IMG8NxYtp6RAJ.jpg", 1622 + "type": "IMAGE", 1623 + "contentType": "image/jpeg" 1624 + }, 1625 + { 1626 + "url": "https://files.strong.app/users/global/THU8NxYtp6RAJ%403x.png", 1627 + "type": "THUMBNAIL", 1628 + "contentType": "image/png" 1629 + } 1630 + ], 1631 + "cellTypeConfigs": [ 1632 + { 1633 + "cellType": "REPS", 1634 + "mandatory": true 1635 + }, 1636 + { 1637 + "cellType": "RPE", 1638 + "isExponent": true 1639 + } 1640 + ], 1641 + "isGlobal": true, 1642 + "measurementType": "EXERCISE" 1643 + }, 1644 + { 1645 + "_links": { 1646 + "self": { 1647 + "href": "/api/measurements/a8eb5de6-5b77-4e81-adab-0835729506c7" 1648 + }, 1649 + "tag": [ 1650 + { 1651 + "href": "/api/tags/arms" 1652 + } 1653 + ] 1654 + }, 1655 + "id": "a8eb5de6-5b77-4e81-adab-0835729506c7", 1656 + "created": "2018-04-27T07:13:31.79Z", 1657 + "lastChanged": "2018-09-27T09:14:12.516Z", 1658 + "name": { 1659 + "en": "Preacher Curl (Machine)" 1660 + }, 1661 + "instructions": { 1662 + "en": "Adjust the preacher bench to the appropriate height and hold a the machine handles with upper arm placed against the pad.||Breathing out, contract the bicep and pull the barbell towards the upper chest.||Hold at the upper position while contracting the bicep and then slowly return to the starting position.||Repeat for reps." 1663 + }, 1664 + "media": [ 1665 + { 1666 + "url": "https://files.strong.app/users/global/IMGuEMx4aDD3G.jpg", 1667 + "type": "IMAGE", 1668 + "contentType": "image/jpeg" 1669 + }, 1670 + { 1671 + "url": "https://files.strong.app/users/global/VIDuEMx4aDD3G.mp4", 1672 + "type": "VIDEO", 1673 + "contentType": "video/mp4" 1674 + }, 1675 + { 1676 + "url": "https://files.strong.app/users/global/THUuEMx4aDD3G%403x.png", 1677 + "type": "THUMBNAIL", 1678 + "contentType": "image/png" 1679 + } 1680 + ], 1681 + "cellTypeConfigs": [ 1682 + { 1683 + "cellType": "OTHER_WEIGHT", 1684 + "mandatory": true 1685 + }, 1686 + { 1687 + "cellType": "REPS", 1688 + "mandatory": true 1689 + }, 1690 + { 1691 + "cellType": "RPE", 1692 + "isExponent": true 1693 + } 1694 + ], 1695 + "isGlobal": true, 1696 + "measurementType": "EXERCISE" 1697 + }, 1698 + { 1699 + "_links": { 1700 + "self": { 1701 + "href": "/api/measurements/815c8007-0c79-4f8d-a2b8-873f7c03be9a" 1702 + }, 1703 + "tag": [ 1704 + { 1705 + "href": "/api/tags/arms" 1706 + } 1707 + ] 1708 + }, 1709 + "id": "815c8007-0c79-4f8d-a2b8-873f7c03be9a", 1710 + "created": "2018-04-27T07:13:25.694Z", 1711 + "lastChanged": "2018-09-27T09:14:09.449Z", 1712 + "name": { 1713 + "en": "Preacher Curl (Dumbbell)" 1714 + }, 1715 + "instructions": { 1716 + "en": "NOTE: This exercise can be performed with either one arm at a time or both arms at the same time.||Adjust the preacher bench to the appropriate height and hold the dumbbells with upper arm placed against the pad.||Breathing out, contract the bicep and pull the barbell towards the upper chest.||Hold at the upper position while contracting the bicep and then slowly return to the starting position.||Repeat for reps." 1717 + }, 1718 + "media": [ 1719 + { 1720 + "url": "https://files.strong.app/users/global/IMG0CAunsXMZ8.jpg", 1721 + "type": "IMAGE", 1722 + "contentType": "image/jpeg" 1723 + }, 1724 + { 1725 + "url": "https://files.strong.app/users/global/VID0CAunsXMZ8.mp4", 1726 + "type": "VIDEO", 1727 + "contentType": "video/mp4" 1728 + }, 1729 + { 1730 + "url": "https://files.strong.app/users/global/THU0CAunsXMZ8%403x.png", 1731 + "type": "THUMBNAIL", 1732 + "contentType": "image/png" 1733 + } 1734 + ], 1735 + "cellTypeConfigs": [ 1736 + { 1737 + "cellType": "DUMBBELL_WEIGHT", 1738 + "mandatory": true 1739 + }, 1740 + { 1741 + "cellType": "REPS", 1742 + "mandatory": true 1743 + }, 1744 + { 1745 + "cellType": "RPE", 1746 + "isExponent": true 1747 + } 1748 + ], 1749 + "isGlobal": true, 1750 + "measurementType": "EXERCISE" 1751 + }, 1752 + { 1753 + "_links": { 1754 + "self": { 1755 + "href": "/api/measurements/ad292205-db0e-4ced-9cef-f82b8aa243d5" 1756 + }, 1757 + "tag": [ 1758 + { 1759 + "href": "/api/tags/legs" 1760 + } 1761 + ] 1762 + }, 1763 + "id": "ad292205-db0e-4ced-9cef-f82b8aa243d5", 1764 + "created": "2018-04-27T07:13:18.588Z", 1765 + "lastChanged": "2018-09-27T09:14:01.036Z", 1766 + "name": { 1767 + "en": "Pistol Squat" 1768 + }, 1769 + "instructions": { 1770 + "en": "While standing upright, raise one foot off the floor. Make sure that your head is looking directly forward and your chest is help up high. Keep your knees and hips slightly bent with your back straight and your arms held directly in front of you. This is your starting position.||Lower your body and squat down by flexing your hips and knees. Make sure to extend your raised leg forward to make room for it as you descend.||Pay close attention to your balance and go as low as your flexibility allows you to.||At the bottom of the movement, hold for a brief moment and slowly return to the starting position by extending your hips and your knees and driving the weight through your working foot.||Repeat for reps, then switch to the opposite side." 1771 + }, 1772 + "media": [ 1773 + { 1774 + "url": "https://files.strong.app/users/global/IMGSN216s1ssO.jpg", 1775 + "type": "IMAGE", 1776 + "contentType": "image/jpeg" 1777 + }, 1778 + { 1779 + "url": "https://files.strong.app/users/global/THUSN216s1ssO%403x.png", 1780 + "type": "THUMBNAIL", 1781 + "contentType": "image/png" 1782 + } 1783 + ], 1784 + "cellTypeConfigs": [ 1785 + { 1786 + "cellType": "WEIGHTED_BODYWEIGHT" 1787 + }, 1788 + { 1789 + "cellType": "REPS", 1790 + "mandatory": true 1791 + }, 1792 + { 1793 + "cellType": "RPE", 1794 + "isExponent": true 1795 + } 1796 + ], 1797 + "isGlobal": true, 1798 + "measurementType": "EXERCISE" 1799 + }, 1800 + { 1801 + "_links": { 1802 + "self": { 1803 + "href": "/api/measurements/487e8b08-458f-43da-a9f6-e339c8d548a9" 1804 + }, 1805 + "tag": [ 1806 + { 1807 + "href": "/api/tags/chest" 1808 + } 1809 + ] 1810 + }, 1811 + "id": "487e8b08-458f-43da-a9f6-e339c8d548a9", 1812 + "created": "2018-04-27T07:13:12.028Z", 1813 + "lastChanged": "2018-09-27T09:13:52.538Z", 1814 + "name": { 1815 + "en": "Pec Deck (Machine)" 1816 + }, 1817 + "instructions": { 1818 + "en": "Sitting with the pad against the back, place your forearms against the pad with your elbows at a 90 degree angle.||Squeeze the chest and bring your elbows together.||Hold the contraction for a brief moment and slowly return to the starting position.||Repeat for reps." 1819 + }, 1820 + "media": [ 1821 + { 1822 + "url": "https://files.strong.app/users/global/IMGtklNHrWzOF.jpg", 1823 + "type": "IMAGE", 1824 + "contentType": "image/jpeg" 1825 + }, 1826 + { 1827 + "url": "https://files.strong.app/users/global/VIDtklNHrWzOF.mp4", 1828 + "type": "VIDEO", 1829 + "contentType": "video/mp4" 1830 + }, 1831 + { 1832 + "url": "https://files.strong.app/users/global/THUtklNHrWzOF%403x.png", 1833 + "type": "THUMBNAIL", 1834 + "contentType": "image/png" 1835 + } 1836 + ], 1837 + "cellTypeConfigs": [ 1838 + { 1839 + "cellType": "OTHER_WEIGHT", 1840 + "mandatory": true 1841 + }, 1842 + { 1843 + "cellType": "REPS", 1844 + "mandatory": true 1845 + }, 1846 + { 1847 + "cellType": "RPE", 1848 + "isExponent": true 1849 + } 1850 + ], 1851 + "isGlobal": true, 1852 + "measurementType": "EXERCISE" 1853 + }, 1854 + { 1855 + "_links": { 1856 + "self": { 1857 + "href": "/api/measurements/45fbc14c-584e-473f-81f3-14ad422906be" 1858 + }, 1859 + "tag": [ 1860 + { 1861 + "href": "/api/tags/shoulders" 1862 + } 1863 + ] 1864 + }, 1865 + "id": "45fbc14c-584e-473f-81f3-14ad422906be", 1866 + "created": "2018-04-27T07:10:30.854Z", 1867 + "lastChanged": "2018-10-15T05:42:48.307Z", 1868 + "name": { 1869 + "en": "Overhead Press (Cable)" 1870 + }, 1871 + "instructions": { 1872 + "en": "Move the cables to the bottom of the towers and select an appropriate weight.||Raise handles to shoulder height and align parallel to the shoulders.||Align elbow with handle so that it is perpendicular to the group and press upward while exhaling.||Lower handles to starting position slowly while inhaling.||Repeat for reps." 1873 + }, 1874 + "media": [ 1875 + { 1876 + "url": "https://files.strong.app/users/global/IMGC3J3MzGLLv.jpg", 1877 + "type": "IMAGE", 1878 + "contentType": "image/jpeg" 1879 + }, 1880 + { 1881 + "url": "https://files.strong.app/users/global/THUC3J3MzGLLv%403x.png", 1882 + "type": "THUMBNAIL", 1883 + "contentType": "image/png" 1884 + } 1885 + ], 1886 + "cellTypeConfigs": [ 1887 + { 1888 + "cellType": "OTHER_WEIGHT", 1889 + "mandatory": true 1890 + }, 1891 + { 1892 + "cellType": "REPS", 1893 + "mandatory": true 1894 + }, 1895 + { 1896 + "cellType": "RPE", 1897 + "isExponent": true 1898 + } 1899 + ], 1900 + "isGlobal": true, 1901 + "measurementType": "EXERCISE" 1902 + }, 1903 + { 1904 + "_links": { 1905 + "self": { 1906 + "href": "/api/measurements/b2f5a8c1-b66a-4b4f-8f2a-72fbf578d943" 1907 + }, 1908 + "tag": [ 1909 + { 1910 + "href": "/api/tags/legs" 1911 + } 1912 + ] 1913 + }, 1914 + "id": "b2f5a8c1-b66a-4b4f-8f2a-72fbf578d943", 1915 + "created": "2018-04-27T07:10:10.317Z", 1916 + "lastChanged": "2018-10-15T05:42:26.642Z", 1917 + "name": { 1918 + "en": "Lying Leg Curl (Machine)" 1919 + }, 1920 + "instructions": { 1921 + "en": "Adjust the machine lever to fit your height so that the pad of the lever is placed a few inches under your calves when lying face down.||While keeping your torso flat on the bench, grab the machine handles and ensure that your legs are fully stretched. This is your starting position.||Without lifting the upper legs from the pad, curl your legs up as high as you possibly can by bringing your foot as close as possible to your glutes.||Hold this position for a brief moment, then bring your legs back down to the initial position.||Repeat for reps." 1922 + }, 1923 + "media": [ 1924 + { 1925 + "url": "https://files.strong.app/users/global/IMGBwAaRYiaI1.jpg", 1926 + "type": "IMAGE", 1927 + "contentType": "image/jpeg" 1928 + }, 1929 + { 1930 + "url": "https://files.strong.app/users/global/VIDBwAaRYiaI1.mp4", 1931 + "type": "VIDEO", 1932 + "contentType": "video/mp4" 1933 + }, 1934 + { 1935 + "url": "https://files.strong.app/users/global/THUBwAaRYiaI1%403x.png", 1936 + "type": "THUMBNAIL", 1937 + "contentType": "image/png" 1938 + } 1939 + ], 1940 + "cellTypeConfigs": [ 1941 + { 1942 + "cellType": "OTHER_WEIGHT", 1943 + "mandatory": true 1944 + }, 1945 + { 1946 + "cellType": "REPS", 1947 + "mandatory": true 1948 + }, 1949 + { 1950 + "cellType": "RPE", 1951 + "isExponent": true 1952 + } 1953 + ], 1954 + "isGlobal": true, 1955 + "measurementType": "EXERCISE" 1956 + }, 1957 + { 1958 + "_links": { 1959 + "self": { 1960 + "href": "/api/measurements/d3f21789-0e0c-4c2a-a633-3617f383a11d" 1961 + }, 1962 + "tag": [ 1963 + { 1964 + "href": "/api/tags/shoulders" 1965 + } 1966 + ] 1967 + }, 1968 + "id": "d3f21789-0e0c-4c2a-a633-3617f383a11d", 1969 + "created": "2018-04-27T07:09:06.873Z", 1970 + "lastChanged": "2018-10-15T05:42:24.823Z", 1971 + "name": { 1972 + "en": "Lateral Raise (Machine)" 1973 + }, 1974 + "instructions": { 1975 + "en": "Adjust the seat height on the machine and select an appropriate load, then take a seat and place your upper arm against the pad. Maintain a straight torso -- this is your starting position.||Begin the movement by pushing your elbows upwards and outwards, and continue raising them until they're parallel with the floor.||Hold at the top of the movement for a brief moment, then slowly return to the starting position in a controlled manner.||Repeat for reps." 1976 + }, 1977 + "media": [ 1978 + { 1979 + "url": "https://files.strong.app/users/global/IMG4389vcZicE.jpg", 1980 + "type": "IMAGE", 1981 + "contentType": "image/jpeg" 1982 + }, 1983 + { 1984 + "url": "https://files.strong.app/users/global/THU4389vcZicE%403x.png", 1985 + "type": "THUMBNAIL", 1986 + "contentType": "image/png" 1987 + } 1988 + ], 1989 + "cellTypeConfigs": [ 1990 + { 1991 + "cellType": "OTHER_WEIGHT", 1992 + "mandatory": true 1993 + }, 1994 + { 1995 + "cellType": "REPS", 1996 + "mandatory": true 1997 + }, 1998 + { 1999 + "cellType": "RPE", 2000 + "isExponent": true 2001 + } 2002 + ], 2003 + "isGlobal": true, 2004 + "measurementType": "EXERCISE" 2005 + }, 2006 + { 2007 + "_links": { 2008 + "self": { 2009 + "href": "/api/measurements/a8121bda-a232-4da2-be80-85bbe05c53d7" 2010 + }, 2011 + "tag": [ 2012 + { 2013 + "href": "/api/tags/back" 2014 + } 2015 + ] 2016 + }, 2017 + "id": "a8121bda-a232-4da2-be80-85bbe05c53d7", 2018 + "created": "2018-04-27T07:08:57.716Z", 2019 + "lastChanged": "2018-10-15T05:40:53.682Z", 2020 + "name": { 2021 + "en": "Lat Pulldown (Machine)" 2022 + }, 2023 + "instructions": { 2024 + "en": "Sit down at the machine and secure your knees under the knee pads.||Grip the machine handles with a pronated grip at around than shoulder width.||As you exhale, pull the handles down until it touches the upper chest.||Pause and squeeze the back muscles.||Slowly bring the bar back to the starting position with the lats fully stretched.||Repeat for reps." 2025 + }, 2026 + "media": [ 2027 + { 2028 + "url": "https://files.strong.app/users/global/IMGIyDTukznLV.jpg", 2029 + "type": "IMAGE", 2030 + "contentType": "image/jpeg" 2031 + }, 2032 + { 2033 + "url": "https://files.strong.app/users/global/THUIyDTukznLV%403x.png", 2034 + "type": "THUMBNAIL", 2035 + "contentType": "image/png" 2036 + } 2037 + ], 2038 + "cellTypeConfigs": [ 2039 + { 2040 + "cellType": "OTHER_WEIGHT", 2041 + "mandatory": true 2042 + }, 2043 + { 2044 + "cellType": "REPS", 2045 + "mandatory": true 2046 + }, 2047 + { 2048 + "cellType": "RPE", 2049 + "isExponent": true 2050 + } 2051 + ], 2052 + "isGlobal": true, 2053 + "measurementType": "EXERCISE" 2054 + }, 2055 + { 2056 + "_links": { 2057 + "self": { 2058 + "href": "/api/measurements/f12e2a9b-02ea-4d38-9127-aa6234786d3a" 2059 + }, 2060 + "tag": [ 2061 + { 2062 + "href": "/api/tags/back" 2063 + } 2064 + ] 2065 + }, 2066 + "id": "f12e2a9b-02ea-4d38-9127-aa6234786d3a", 2067 + "created": "2018-04-27T07:08:49.051Z", 2068 + "lastChanged": "2018-10-15T05:40:57.943Z", 2069 + "name": { 2070 + "en": "Lat Pulldown - Wide Grip (Cable)" 2071 + }, 2072 + "instructions": { 2073 + "en": "Sit down at the machine and secure your knees under the knee pads.||Grip the bar with a pronated grip wider than shoulder width.||As you exhale, pull the handles down until it touches the upper chest.||Pause and squeeze the back muscles.||Slowly bring the bar back to the starting position with the lats fully stretched.||Repeat for reps." 2074 + }, 2075 + "media": [ 2076 + { 2077 + "url": "https://files.strong.app/users/global/IMGnPSMbunT1f.jpg", 2078 + "type": "IMAGE", 2079 + "contentType": "image/jpeg" 2080 + }, 2081 + { 2082 + "url": "https://files.strong.app/users/global/THUnPSMbunT1f%403x.png", 2083 + "type": "THUMBNAIL", 2084 + "contentType": "image/png" 2085 + } 2086 + ], 2087 + "cellTypeConfigs": [ 2088 + { 2089 + "cellType": "OTHER_WEIGHT", 2090 + "mandatory": true 2091 + }, 2092 + { 2093 + "cellType": "REPS", 2094 + "mandatory": true 2095 + }, 2096 + { 2097 + "cellType": "RPE", 2098 + "isExponent": true 2099 + } 2100 + ], 2101 + "isGlobal": true, 2102 + "measurementType": "EXERCISE" 2103 + }, 2104 + { 2105 + "_links": { 2106 + "self": { 2107 + "href": "/api/measurements/fbd89dfb-0de7-4808-86d7-979d6f35126a" 2108 + }, 2109 + "tag": [ 2110 + { 2111 + "href": "/api/tags/back" 2112 + } 2113 + ] 2114 + }, 2115 + "id": "fbd89dfb-0de7-4808-86d7-979d6f35126a", 2116 + "created": "2018-04-27T07:08:40.802Z", 2117 + "lastChanged": "2018-10-15T05:40:56.425Z", 2118 + "name": { 2119 + "en": "Lat Pulldown - Underhand (Cable)" 2120 + }, 2121 + "instructions": { 2122 + "en": "Sit down at the machine and secure your knees under the knee pads.||Grip the bar with a supinated grip slightly outside of shoulder width.||As you exhale, pull the handles down until it touches the upper chest.||Pause and squeeze the back muscles.||Slowly bring the bar back to the starting position with the lats fully stretched.||Repeat for reps." 2123 + }, 2124 + "media": [ 2125 + { 2126 + "url": "https://files.strong.app/users/global/IMGFLkiUDr4re.jpg", 2127 + "type": "IMAGE", 2128 + "contentType": "image/jpeg" 2129 + }, 2130 + { 2131 + "url": "https://files.strong.app/users/global/THUFLkiUDr4re%403x.png", 2132 + "type": "THUMBNAIL", 2133 + "contentType": "image/png" 2134 + } 2135 + ], 2136 + "cellTypeConfigs": [ 2137 + { 2138 + "cellType": "OTHER_WEIGHT", 2139 + "mandatory": true 2140 + }, 2141 + { 2142 + "cellType": "REPS", 2143 + "mandatory": true 2144 + }, 2145 + { 2146 + "cellType": "RPE", 2147 + "isExponent": true 2148 + } 2149 + ], 2150 + "isGlobal": true, 2151 + "measurementType": "EXERCISE" 2152 + }, 2153 + { 2154 + "_links": { 2155 + "self": { 2156 + "href": "/api/measurements/3ee4f524-773c-453b-bcb9-192f9c6a2efa" 2157 + }, 2158 + "tag": [ 2159 + { 2160 + "href": "/api/tags/core" 2161 + } 2162 + ] 2163 + }, 2164 + "id": "3ee4f524-773c-453b-bcb9-192f9c6a2efa", 2165 + "created": "2018-04-27T07:08:32.545Z", 2166 + "lastChanged": "2018-10-15T05:39:56.605Z", 2167 + "name": { 2168 + "en": "Knee Raise (Captain's Chair)" 2169 + }, 2170 + "instructions": { 2171 + "en": "Rest your forearms on the captain's chair pads while holding on to the handles -- your arms should be bent at a 90 degree angle.||The torso should be straight with the lower back pressed against the pad of the machine and the legs hanging straight down. This is your starting position.||Lift your legs up and bring your knees to your chest. Be sure not to use any momentum, and avoid swinging your legs up.||Hold at the top of the movement for a brief moment, then lower your legs back down to the starting position.||Repeat for reps." 2172 + }, 2173 + "media": [ 2174 + { 2175 + "url": "https://files.strong.app/users/global/IMGwkhBV3Coyj.jpg", 2176 + "type": "IMAGE", 2177 + "contentType": "image/jpeg" 2178 + }, 2179 + { 2180 + "url": "https://files.strong.app/users/global/VIDwkhBV3Coyj.mp4", 2181 + "type": "VIDEO", 2182 + "contentType": "video/mp4" 2183 + }, 2184 + { 2185 + "url": "https://files.strong.app/users/global/THUwkhBV3Coyj%403x.png", 2186 + "type": "THUMBNAIL", 2187 + "contentType": "image/png" 2188 + } 2189 + ], 2190 + "cellTypeConfigs": [ 2191 + { 2192 + "cellType": "WEIGHTED_BODYWEIGHT" 2193 + }, 2194 + { 2195 + "cellType": "REPS", 2196 + "mandatory": true 2197 + }, 2198 + { 2199 + "cellType": "RPE", 2200 + "isExponent": true 2201 + } 2202 + ], 2203 + "isGlobal": true, 2204 + "measurementType": "EXERCISE" 2205 + }, 2206 + { 2207 + "_links": { 2208 + "self": { 2209 + "href": "/api/measurements/65e1c38c-2013-40df-9d57-716a7f7f71e1" 2210 + }, 2211 + "tag": [ 2212 + { 2213 + "href": "/api/tags/back" 2214 + } 2215 + ] 2216 + }, 2217 + "id": "65e1c38c-2013-40df-9d57-716a7f7f71e1", 2218 + "created": "2018-04-27T07:08:23.935Z", 2219 + "lastChanged": "2018-09-27T08:55:57.117Z", 2220 + "name": { 2221 + "en": "Iso-Lateral Row (Machine)" 2222 + }, 2223 + "instructions": { 2224 + "en": "NOTE: This exercise can be performed one arm at a time or both hands at the same time.||Grip the machine handles with both hands and sit with chest upright against the pad and back straight.||With shoulders retracted, pull the handle towards the mid torso.||Squeeze the back muscles as the handle approaches the torso and hold before returning to the starting position.||Repeat for reps." 2225 + }, 2226 + "media": [ 2227 + { 2228 + "url": "https://files.strong.app/users/global/IMG8UKC0MjWJ0.jpg", 2229 + "type": "IMAGE", 2230 + "contentType": "image/jpeg" 2231 + }, 2232 + { 2233 + "url": "https://files.strong.app/users/global/THU8UKC0MjWJ0%403x.png", 2234 + "type": "THUMBNAIL", 2235 + "contentType": "image/png" 2236 + } 2237 + ], 2238 + "cellTypeConfigs": [ 2239 + { 2240 + "cellType": "OTHER_WEIGHT", 2241 + "mandatory": true 2242 + }, 2243 + { 2244 + "cellType": "REPS", 2245 + "mandatory": true 2246 + }, 2247 + { 2248 + "cellType": "RPE", 2249 + "isExponent": true 2250 + } 2251 + ], 2252 + "isGlobal": true, 2253 + "measurementType": "EXERCISE" 2254 + }, 2255 + { 2256 + "_links": { 2257 + "self": { 2258 + "href": "/api/measurements/b710665a-f88e-4d31-99bf-5ecb7b5f6500" 2259 + }, 2260 + "tag": [ 2261 + { 2262 + "href": "/api/tags/chest" 2263 + } 2264 + ] 2265 + }, 2266 + "id": "b710665a-f88e-4d31-99bf-5ecb7b5f6500", 2267 + "created": "2018-04-27T07:08:14.852Z", 2268 + "lastChanged": "2018-09-27T08:55:55.242Z", 2269 + "name": { 2270 + "en": "Iso-Lateral Chest Press (Machine)" 2271 + }, 2272 + "instructions": { 2273 + "en": "NOTE: This exercise can be done one arm at a time or with both arms at the same time.||Adjust the seat for your height so that the handles are near the middle of your chest. Your head should be up straight, and your chest held upwards. This is your starting position.||Press the handles forward until your arms are fully extended.||Briefly pause at the top of the movement, and lower the weight back down to the starting position.||Repeat for reps." 2274 + }, 2275 + "media": [ 2276 + { 2277 + "url": "https://files.strong.app/users/global/IMG949NJCigex.jpg", 2278 + "type": "IMAGE", 2279 + "contentType": "image/jpeg" 2280 + }, 2281 + { 2282 + "url": "https://files.strong.app/users/global/VID949NJCigex.mp4", 2283 + "type": "VIDEO", 2284 + "contentType": "video/mp4" 2285 + }, 2286 + { 2287 + "url": "https://files.strong.app/users/global/THU949NJCigex%403x.png", 2288 + "type": "THUMBNAIL", 2289 + "contentType": "image/png" 2290 + } 2291 + ], 2292 + "cellTypeConfigs": [ 2293 + { 2294 + "cellType": "OTHER_WEIGHT", 2295 + "mandatory": true 2296 + }, 2297 + { 2298 + "cellType": "REPS", 2299 + "mandatory": true 2300 + }, 2301 + { 2302 + "cellType": "RPE", 2303 + "isExponent": true 2304 + } 2305 + ], 2306 + "isGlobal": true, 2307 + "measurementType": "EXERCISE" 2308 + }, 2309 + { 2310 + "_links": { 2311 + "self": { 2312 + "href": "/api/measurements/9a999f16-ca2a-47bf-a96c-b4977a6173ff" 2313 + }, 2314 + "tag": [ 2315 + { 2316 + "href": "/api/tags/back" 2317 + } 2318 + ] 2319 + }, 2320 + "id": "9a999f16-ca2a-47bf-a96c-b4977a6173ff", 2321 + "created": "2018-04-27T07:08:05.493Z", 2322 + "lastChanged": "2018-09-27T08:56:12.376Z", 2323 + "name": { 2324 + "en": "Inverted Row (Bodyweight)" 2325 + }, 2326 + "instructions": { 2327 + "en": "NOTE: For this exercise, you can use a power rack or a Smith machine.||Position a bar in a rack to about waist height.||Lie down underneath the bar and hang on the bar with a slightly wider than shoulder width Your body should be straight with your heels on the ground with your arms fully extended. This will be your starting position.||Pull your chest towards the bar by retracting your shoulder blades and flexing at the elbow.||Pause at the top of the movement, then slowly lower yourself back down to the starting position.||Repeat for reps." 2328 + }, 2329 + "media": [ 2330 + { 2331 + "url": "https://files.strong.app/users/global/IMGPrVcu3FSXf.jpg", 2332 + "type": "IMAGE", 2333 + "contentType": "image/jpeg" 2334 + }, 2335 + { 2336 + "url": "https://files.strong.app/users/global/VIDPrVcu3FSXf.mp4", 2337 + "type": "VIDEO", 2338 + "contentType": "video/mp4" 2339 + }, 2340 + { 2341 + "url": "https://files.strong.app/users/global/THUPrVcu3FSXf%403x.png", 2342 + "type": "THUMBNAIL", 2343 + "contentType": "image/png" 2344 + } 2345 + ], 2346 + "cellTypeConfigs": [ 2347 + { 2348 + "cellType": "REPS", 2349 + "mandatory": true 2350 + }, 2351 + { 2352 + "cellType": "RPE", 2353 + "isExponent": true 2354 + } 2355 + ], 2356 + "isGlobal": true, 2357 + "measurementType": "EXERCISE" 2358 + }, 2359 + { 2360 + "_links": { 2361 + "self": { 2362 + "href": "/api/measurements/2a19b409-da25-48de-8205-3fb89f7e95f2" 2363 + }, 2364 + "tag": [ 2365 + { 2366 + "href": "/api/tags/cardio" 2367 + } 2368 + ] 2369 + }, 2370 + "id": "2a19b409-da25-48de-8205-3fb89f7e95f2", 2371 + "created": "2018-04-27T07:06:47.88Z", 2372 + "lastChanged": "2018-10-15T05:54:09.348Z", 2373 + "name": { 2374 + "en": "Running (Treadmill)" 2375 + }, 2376 + "media": [ 2377 + { 2378 + "url": "https://files.strong.app/users/global/IMGHiAlcwtgMx.jpg", 2379 + "type": "IMAGE", 2380 + "contentType": "image/jpeg" 2381 + }, 2382 + { 2383 + "url": "https://files.strong.app/users/global/VIDHiAlcwtgMx.mp4", 2384 + "type": "VIDEO", 2385 + "contentType": "video/mp4" 2386 + }, 2387 + { 2388 + "url": "https://files.strong.app/users/global/THUHiAlcwtgMx%403x.png", 2389 + "type": "THUMBNAIL", 2390 + "contentType": "image/png" 2391 + } 2392 + ], 2393 + "cellTypeConfigs": [ 2394 + { 2395 + "cellType": "DISTANCE" 2396 + }, 2397 + { 2398 + "cellType": "DURATION" 2399 + } 2400 + ], 2401 + "isGlobal": true, 2402 + "measurementType": "EXERCISE" 2403 + }, 2404 + { 2405 + "_links": { 2406 + "self": { 2407 + "href": "/api/measurements/ed06489a-f597-4cc1-81d0-eef7804f1fc5" 2408 + }, 2409 + "tag": [ 2410 + { 2411 + "href": "/api/tags/back" 2412 + } 2413 + ] 2414 + }, 2415 + "id": "ed06489a-f597-4cc1-81d0-eef7804f1fc5", 2416 + "created": "2018-04-27T07:06:35.138Z", 2417 + "lastChanged": "2018-10-15T06:32:22.125Z", 2418 + "name": { 2419 + "en": "Incline Row (Dumbbell)" 2420 + }, 2421 + "instructions": { 2422 + "en": "NOTE: This exercise can be done one arm at a time or two arms at the same time.||Adjust the bench so that it's at a 30 to 45 degree angle and lean into it.||Hold a dumbbell on each hand and let your arms hang down. This is your starting position.||Row the dumbbells up to your side by retracting your shoulder blades and pulling at the elbows.||Pause at the top of the exercise, and then return to the starting position.||Repeat for reps." 2423 + }, 2424 + "media": [ 2425 + { 2426 + "url": "https://files.strong.app/users/global/IMGuAFBYeQy5e.jpg", 2427 + "type": "IMAGE", 2428 + "contentType": "image/jpeg" 2429 + }, 2430 + { 2431 + "url": "https://files.strong.app/users/global/VIDuAFBYeQy5e.mp4", 2432 + "type": "VIDEO", 2433 + "contentType": "video/mp4" 2434 + }, 2435 + { 2436 + "url": "https://files.strong.app/users/global/THUuAFBYeQy5e%403x.png", 2437 + "type": "THUMBNAIL", 2438 + "contentType": "image/png" 2439 + } 2440 + ], 2441 + "cellTypeConfigs": [ 2442 + { 2443 + "cellType": "DUMBBELL_WEIGHT", 2444 + "mandatory": true 2445 + }, 2446 + { 2447 + "cellType": "REPS", 2448 + "mandatory": true 2449 + }, 2450 + { 2451 + "cellType": "RPE", 2452 + "isExponent": true 2453 + } 2454 + ], 2455 + "isGlobal": true, 2456 + "measurementType": "EXERCISE" 2457 + }, 2458 + { 2459 + "_links": { 2460 + "self": { 2461 + "href": "/api/measurements/a45a5776-cbfc-4abf-9a05-f5c7d110c8ff" 2462 + }, 2463 + "tag": [ 2464 + { 2465 + "href": "/api/tags/arms" 2466 + } 2467 + ] 2468 + }, 2469 + "id": "a45a5776-cbfc-4abf-9a05-f5c7d110c8ff", 2470 + "created": "2018-04-27T07:06:24.373Z", 2471 + "lastChanged": "2018-10-15T06:32:16.894Z", 2472 + "name": { 2473 + "en": "Incline Curl (Dumbbell)" 2474 + }, 2475 + "instructions": { 2476 + "en": "NOTE: This exercise can be done with two arms at the same time, or one hand at a time.||Adjust the bench so that it has a 45 degree incline and lie down on it with a dumbbell in each hand and elbows touching the side of the torso.||Holding the upper arm stationary, curl the right weight with palms facing forward. Lift the dumbbell toward the shoulder until the bicep is fully contracted. Hold this position for a second and squeeze the bicep.||Lower the right dumbbell to the starting position and repeat the same movement with the left dumbbell.||Repeat for reps." 2477 + }, 2478 + "media": [ 2479 + { 2480 + "url": "https://files.strong.app/users/global/THUnj6lGOZQiL%403x.png", 2481 + "type": "THUMBNAIL", 2482 + "contentType": "image/png" 2483 + } 2484 + ], 2485 + "cellTypeConfigs": [ 2486 + { 2487 + "cellType": "DUMBBELL_WEIGHT", 2488 + "mandatory": true 2489 + }, 2490 + { 2491 + "cellType": "REPS", 2492 + "mandatory": true 2493 + }, 2494 + { 2495 + "cellType": "RPE", 2496 + "isExponent": true 2497 + } 2498 + ], 2499 + "isGlobal": true, 2500 + "measurementType": "EXERCISE" 2501 + }, 2502 + { 2503 + "_links": { 2504 + "self": { 2505 + "href": "/api/measurements/247fe479-b90c-40a3-baf1-07f3c05ed014" 2506 + }, 2507 + "tag": [ 2508 + { 2509 + "href": "/api/tags/chest" 2510 + } 2511 + ] 2512 + }, 2513 + "id": "247fe479-b90c-40a3-baf1-07f3c05ed014", 2514 + "created": "2018-04-27T07:06:17.06Z", 2515 + "lastChanged": "2018-09-27T09:13:28.85Z", 2516 + "name": { 2517 + "en": "Incline Chest Press (Machine)" 2518 + }, 2519 + "instructions": { 2520 + "en": "Adjust the seat for your height so that the handles are near the top of your chest. Your head should be up straight, and your chest held upwards. This is your starting position.||Press the handles forward until your arms are fully extended.||Briefly pause at the top of the movement, and lower the weight back down to the starting position.||Repeat for reps." 2521 + }, 2522 + "media": [ 2523 + { 2524 + "url": "https://files.strong.app/users/global/IMG8i5WGtS0oO.jpg", 2525 + "type": "IMAGE", 2526 + "contentType": "image/jpeg" 2527 + }, 2528 + { 2529 + "url": "https://files.strong.app/users/global/VID8i5WGtS0oO.mp4", 2530 + "type": "VIDEO", 2531 + "contentType": "video/mp4" 2532 + }, 2533 + { 2534 + "url": "https://files.strong.app/users/global/THU8i5WGtS0oO%403x.png", 2535 + "type": "THUMBNAIL", 2536 + "contentType": "image/png" 2537 + } 2538 + ], 2539 + "cellTypeConfigs": [ 2540 + { 2541 + "cellType": "OTHER_WEIGHT", 2542 + "mandatory": true 2543 + }, 2544 + { 2545 + "cellType": "REPS", 2546 + "mandatory": true 2547 + }, 2548 + { 2549 + "cellType": "RPE", 2550 + "isExponent": true 2551 + } 2552 + ], 2553 + "isGlobal": true, 2554 + "measurementType": "EXERCISE" 2555 + }, 2556 + { 2557 + "_links": { 2558 + "self": { 2559 + "href": "/api/measurements/b17b3529-a04b-4860-84ea-16b6de4b65cc" 2560 + }, 2561 + "tag": [ 2562 + { 2563 + "href": "/api/tags/chest" 2564 + } 2565 + ] 2566 + }, 2567 + "id": "b17b3529-a04b-4860-84ea-16b6de4b65cc", 2568 + "created": "2018-04-27T07:06:08.671Z", 2569 + "lastChanged": "2018-10-15T06:32:09.835Z", 2570 + "name": { 2571 + "en": "Incline Chest Fly (Dumbbell)" 2572 + }, 2573 + "instructions": { 2574 + "en": "Adjust the bench on a 30-45 degree incline and lie down on it with a dumbbell in each hand.||Extend arms in front of chest at shoulder width.||With a slight bend at the elbow, lower arms in a circular motion to the side in an open arm position.||Bring dumbbells together in wide hugging motion until dumbbells are nearly together, squeezing the chest at the top of the movement.||Repeat for reps." 2575 + }, 2576 + "media": [ 2577 + { 2578 + "url": "https://files.strong.app/users/global/IMG3ZZ9zQep1j.jpg", 2579 + "type": "IMAGE", 2580 + "contentType": "image/jpeg" 2581 + }, 2582 + { 2583 + "url": "https://files.strong.app/users/global/VID3ZZ9zQep1j.mp4", 2584 + "type": "VIDEO", 2585 + "contentType": "video/mp4" 2586 + }, 2587 + { 2588 + "url": "https://files.strong.app/users/global/THU3ZZ9zQep1j%403x.png", 2589 + "type": "THUMBNAIL", 2590 + "contentType": "image/png" 2591 + } 2592 + ], 2593 + "cellTypeConfigs": [ 2594 + { 2595 + "cellType": "DUMBBELL_WEIGHT", 2596 + "mandatory": true 2597 + }, 2598 + { 2599 + "cellType": "REPS", 2600 + "mandatory": true 2601 + }, 2602 + { 2603 + "cellType": "RPE", 2604 + "isExponent": true 2605 + } 2606 + ], 2607 + "isGlobal": true, 2608 + "measurementType": "EXERCISE" 2609 + }, 2610 + { 2611 + "_links": { 2612 + "self": { 2613 + "href": "/api/measurements/312f0076-00f8-47a4-9365-38c80b99cb91" 2614 + }, 2615 + "tag": [ 2616 + { 2617 + "href": "/api/tags/legs" 2618 + } 2619 + ] 2620 + }, 2621 + "id": "312f0076-00f8-47a4-9365-38c80b99cb91", 2622 + "created": "2018-04-27T07:06:00.234Z", 2623 + "lastChanged": "2018-09-27T09:13:15.548Z", 2624 + "name": { 2625 + "en": "Hip Adductor (Machine)" 2626 + }, 2627 + "instructions": { 2628 + "en": "Adjust the padding so that your legs are spread as open as your flexibility allows you to.||Sit down on the adductor machine and select a weight you are comfortable with, and grip the handles by the side. This is your starting position.||Slowly press against the pads with your legs to move them towards each other while exhaling.||Pause briefly once your legs meet, then slowly return to the starting position.||Repeat for reps." 2629 + }, 2630 + "media": [ 2631 + { 2632 + "url": "https://files.strong.app/users/global/IMGNF7ZnLEaCo.jpg", 2633 + "type": "IMAGE", 2634 + "contentType": "image/jpeg" 2635 + }, 2636 + { 2637 + "url": "https://files.strong.app/users/global/VIDNF7ZnLEaCo.mp4", 2638 + "type": "VIDEO", 2639 + "contentType": "video/mp4" 2640 + }, 2641 + { 2642 + "url": "https://files.strong.app/users/global/THUNF7ZnLEaCo%403x.png", 2643 + "type": "THUMBNAIL", 2644 + "contentType": "image/png" 2645 + } 2646 + ], 2647 + "cellTypeConfigs": [ 2648 + { 2649 + "cellType": "OTHER_WEIGHT", 2650 + "mandatory": true 2651 + }, 2652 + { 2653 + "cellType": "REPS", 2654 + "mandatory": true 2655 + }, 2656 + { 2657 + "cellType": "RPE", 2658 + "isExponent": true 2659 + } 2660 + ], 2661 + "isGlobal": true, 2662 + "measurementType": "EXERCISE" 2663 + }, 2664 + { 2665 + "_links": { 2666 + "self": { 2667 + "href": "/api/measurements/bad7dcc2-fac7-4ec8-8c03-1ec6bb471069" 2668 + }, 2669 + "tag": [ 2670 + { 2671 + "href": "/api/tags/legs" 2672 + } 2673 + ] 2674 + }, 2675 + "id": "bad7dcc2-fac7-4ec8-8c03-1ec6bb471069", 2676 + "created": "2018-04-27T07:05:52.451Z", 2677 + "lastChanged": "2018-09-27T09:13:18.963Z", 2678 + "name": { 2679 + "en": "Hip Abductor (Machine)" 2680 + }, 2681 + "instructions": { 2682 + "en": "Adjust the padding so that it's your legs are fully closed and the pads are touching the sides of your thighs.||Sit down on the abductor machine and select a weight you are comfortable with, and grip the handles by the side. This is your starting position.||Slowly press against the pads with your legs to move them away from each other while exhaling.||Pause briefly once your legs meet, then slowly return to the starting position.||Repeat for reps." 2683 + }, 2684 + "media": [ 2685 + { 2686 + "url": "https://files.strong.app/users/global/IMGSQD7WLePEq.jpg", 2687 + "type": "IMAGE", 2688 + "contentType": "image/jpeg" 2689 + }, 2690 + { 2691 + "url": "https://files.strong.app/users/global/VIDSQD7WLePEq.mp4", 2692 + "type": "VIDEO", 2693 + "contentType": "video/mp4" 2694 + }, 2695 + { 2696 + "url": "https://files.strong.app/users/global/THUSQD7WLePEq%403x.png", 2697 + "type": "THUMBNAIL", 2698 + "contentType": "image/png" 2699 + } 2700 + ], 2701 + "cellTypeConfigs": [ 2702 + { 2703 + "cellType": "OTHER_WEIGHT", 2704 + "mandatory": true 2705 + }, 2706 + { 2707 + "cellType": "REPS", 2708 + "mandatory": true 2709 + }, 2710 + { 2711 + "cellType": "RPE", 2712 + "isExponent": true 2713 + } 2714 + ], 2715 + "isGlobal": true, 2716 + "measurementType": "EXERCISE" 2717 + }, 2718 + { 2719 + "_links": { 2720 + "self": { 2721 + "href": "/api/measurements/894a9de0-b8f3-4f7f-8102-6bf9cc8c5c6e" 2722 + }, 2723 + "tag": [ 2724 + { 2725 + "href": "/api/tags/legs" 2726 + } 2727 + ] 2728 + }, 2729 + "id": "894a9de0-b8f3-4f7f-8102-6bf9cc8c5c6e", 2730 + "created": "2018-04-27T07:05:45.469Z", 2731 + "lastChanged": "2018-10-15T06:31:56.207Z", 2732 + "name": { 2733 + "en": "Hack Squat (Barbell)" 2734 + }, 2735 + "instructions": { 2736 + "en": "Stand up straight with a barbell placed behind your feet. Squat down and grip the bar with a shoulder width grip. This is your starting position.||Stand up with the barbell by pressing mainly with the heel of the foot and squeezing the thighs.||Slowly lower yourself to the starting position.||Repeat for reps." 2737 + }, 2738 + "media": [ 2739 + { 2740 + "url": "https://files.strong.app/users/global/IMGNI9zB8NrnU.jpg", 2741 + "type": "IMAGE", 2742 + "contentType": "image/jpeg" 2743 + }, 2744 + { 2745 + "url": "https://files.strong.app/users/global/THUNI9zB8NrnU%403x.png", 2746 + "type": "THUMBNAIL", 2747 + "contentType": "image/png" 2748 + } 2749 + ], 2750 + "cellTypeConfigs": [ 2751 + { 2752 + "cellType": "BARBELL_WEIGHT", 2753 + "mandatory": true 2754 + }, 2755 + { 2756 + "cellType": "REPS", 2757 + "mandatory": true 2758 + }, 2759 + { 2760 + "cellType": "RPE", 2761 + "isExponent": true 2762 + } 2763 + ], 2764 + "isGlobal": true, 2765 + "measurementType": "EXERCISE" 2766 + }, 2767 + { 2768 + "_links": { 2769 + "self": { 2770 + "href": "/api/measurements/bf2b8a82-3e96-47ca-a106-796e23193444" 2771 + }, 2772 + "tag": [ 2773 + { 2774 + "href": "/api/tags/legs" 2775 + } 2776 + ] 2777 + }, 2778 + "id": "bf2b8a82-3e96-47ca-a106-796e23193444", 2779 + "created": "2018-04-27T07:05:38.979Z", 2780 + "lastChanged": "2018-10-15T06:31:49.18Z", 2781 + "name": { 2782 + "en": "Glute Ham Raise" 2783 + }, 2784 + "instructions": { 2785 + "en": "NOTE: To make this exercise more difficult, hold a weight plate across your chest or behind your neck.||Adjust the equipment to make sure that your feet is underneath the footplate when your knees are placed just behind the padding of the glute ham raise bench.||Place your feet against the footplate in between the rollers as you lie face down.||Start the movement with your torso upright -- your body should form a 90-degree angle while you're bent at the knees.||Lower your body by straightening your knees until your whole body is horizontal, and continue to lower your torso until your body is almost upside down.||Slowly bring yourself back to the starting position by extending your hips and contracting your glutes until your body is upright.||Repeat for reps." 2786 + }, 2787 + "media": [], 2788 + "cellTypeConfigs": [ 2789 + { 2790 + "cellType": "WEIGHTED_BODYWEIGHT" 2791 + }, 2792 + { 2793 + "cellType": "REPS", 2794 + "mandatory": true 2795 + }, 2796 + { 2797 + "cellType": "RPE", 2798 + "isExponent": true 2799 + } 2800 + ], 2801 + "isGlobal": true, 2802 + "measurementType": "EXERCISE" 2803 + }, 2804 + { 2805 + "_links": { 2806 + "self": { 2807 + "href": "/api/measurements/a1b1a1cb-dacc-4d18-bf62-95d597db6715" 2808 + }, 2809 + "tag": [ 2810 + { 2811 + "href": "/api/tags/shoulders" 2812 + } 2813 + ] 2814 + }, 2815 + "id": "a1b1a1cb-dacc-4d18-bf62-95d597db6715", 2816 + "created": "2018-04-27T07:05:32.646Z", 2817 + "lastChanged": "2018-10-15T06:31:43.647Z", 2818 + "name": { 2819 + "en": "Front Raise (Plate)" 2820 + }, 2821 + "instructions": { 2822 + "en": "Pick up the weight plate with both hands and position them in front of your legs with your elbows straight.||Raise the weight plate in front of you until your arms are at least parallel to the floor or slightly beyond.||Lower and repeat for reps." 2823 + }, 2824 + "media": [ 2825 + { 2826 + "url": "https://files.strong.app/users/global/IMGSMTIowUBKy.jpg", 2827 + "type": "IMAGE", 2828 + "contentType": "image/jpeg" 2829 + }, 2830 + { 2831 + "url": "https://files.strong.app/users/global/VIDSMTIowUBKy.mp4", 2832 + "type": "VIDEO", 2833 + "contentType": "video/mp4" 2834 + }, 2835 + { 2836 + "url": "https://files.strong.app/users/global/THUSMTIowUBKy%403x.png", 2837 + "type": "THUMBNAIL", 2838 + "contentType": "image/png" 2839 + } 2840 + ], 2841 + "cellTypeConfigs": [ 2842 + { 2843 + "cellType": "OTHER_WEIGHT", 2844 + "mandatory": true 2845 + }, 2846 + { 2847 + "cellType": "REPS", 2848 + "mandatory": true 2849 + }, 2850 + { 2851 + "cellType": "RPE", 2852 + "isExponent": true 2853 + } 2854 + ], 2855 + "isGlobal": true, 2856 + "measurementType": "EXERCISE" 2857 + }, 2858 + { 2859 + "_links": { 2860 + "self": { 2861 + "href": "/api/measurements/4464e3b1-c412-4047-a5b9-8cdb7c8fe7b3" 2862 + }, 2863 + "tag": [ 2864 + { 2865 + "href": "/api/tags/cardio" 2866 + } 2867 + ] 2868 + }, 2869 + "id": "4464e3b1-c412-4047-a5b9-8cdb7c8fe7b3", 2870 + "created": "2018-04-27T07:05:25.46Z", 2871 + "lastChanged": "2018-09-27T09:12:52.1Z", 2872 + "name": { 2873 + "en": "Elliptical Machine" 2874 + }, 2875 + "media": [ 2876 + { 2877 + "url": "https://files.strong.app/users/global/IMGSuGuVl8OYz.jpg", 2878 + "type": "IMAGE", 2879 + "contentType": "image/jpeg" 2880 + }, 2881 + { 2882 + "url": "https://files.strong.app/users/global/VIDSuGuVl8OYz.mp4", 2883 + "type": "VIDEO", 2884 + "contentType": "video/mp4" 2885 + }, 2886 + { 2887 + "url": "https://files.strong.app/users/global/THUSuGuVl8OYz%403x.png", 2888 + "type": "THUMBNAIL", 2889 + "contentType": "image/png" 2890 + } 2891 + ], 2892 + "cellTypeConfigs": [ 2893 + { 2894 + "cellType": "DISTANCE" 2895 + }, 2896 + { 2897 + "cellType": "DURATION" 2898 + } 2899 + ], 2900 + "isGlobal": true, 2901 + "measurementType": "EXERCISE" 2902 + }, 2903 + { 2904 + "_links": { 2905 + "self": { 2906 + "href": "/api/measurements/c0748e6e-3a6a-4217-8912-0c2cc92ec704" 2907 + }, 2908 + "tag": [ 2909 + { 2910 + "href": "/api/tags/legs" 2911 + } 2912 + ] 2913 + }, 2914 + "id": "c0748e6e-3a6a-4217-8912-0c2cc92ec704", 2915 + "created": "2018-04-27T07:05:16.653Z", 2916 + "lastChanged": "2018-10-15T06:31:30.531Z", 2917 + "name": { 2918 + "en": "Deficit Deadlift (Barbell)" 2919 + }, 2920 + "instructions": { 2921 + "en": "Stand on top of a weight plate so your feet is approximately 1-3 inches above the floor.||Place the barbell so it is positioned directly above your midfoot.||Place feet shoulder width apart and grip the bar at shoulder width apart.||Lower hips and bend knees to bring shins into the bar.||Lift the chest and take a deep breath to brace the core -- your core should be braced throughout the entire movement.||Retract shoulder blades and pull on the bar with as much force as you possibly can without lifting it off the ground.||Lift the bar upward by extending your hips, straightening your torso, and driving your feet through the ground.||Return weight to the floor in a controlled motion by breaking at the hips and bending the legs.||Repeat for reps." 2922 + }, 2923 + "media": [ 2924 + { 2925 + "url": "https://files.strong.app/users/global/IMGZ0bMz808dA.jpg", 2926 + "type": "IMAGE", 2927 + "contentType": "image/jpeg" 2928 + }, 2929 + { 2930 + "url": "https://files.strong.app/users/global/THUZ0bMz808dA%403x.png", 2931 + "type": "THUMBNAIL", 2932 + "contentType": "image/png" 2933 + } 2934 + ], 2935 + "cellTypeConfigs": [ 2936 + { 2937 + "cellType": "BARBELL_WEIGHT", 2938 + "mandatory": true 2939 + }, 2940 + { 2941 + "cellType": "REPS", 2942 + "mandatory": true 2943 + }, 2944 + { 2945 + "cellType": "RPE", 2946 + "isExponent": true 2947 + } 2948 + ], 2949 + "isGlobal": true, 2950 + "measurementType": "EXERCISE" 2951 + }, 2952 + { 2953 + "_links": { 2954 + "self": { 2955 + "href": "/api/measurements/9a426b99-2830-4249-8314-bab46945fb77" 2956 + }, 2957 + "tag": [ 2958 + { 2959 + "href": "/api/tags/cardio" 2960 + } 2961 + ] 2962 + }, 2963 + "id": "9a426b99-2830-4249-8314-bab46945fb77", 2964 + "created": "2018-04-27T07:05:09.872Z", 2965 + "lastChanged": "2018-10-15T06:31:20.352Z", 2966 + "name": { 2967 + "en": "Cycling (Indoor)" 2968 + }, 2969 + "media": [ 2970 + { 2971 + "url": "https://files.strong.app/users/global/IMGPKpeAh4jO6.jpg", 2972 + "type": "IMAGE", 2973 + "contentType": "image/jpeg" 2974 + }, 2975 + { 2976 + "url": "https://files.strong.app/users/global/VIDPKpeAh4jO6.mp4", 2977 + "type": "VIDEO", 2978 + "contentType": "video/mp4" 2979 + }, 2980 + { 2981 + "url": "https://files.strong.app/users/global/THUPKpeAh4jO6%403x.png", 2982 + "type": "THUMBNAIL", 2983 + "contentType": "image/png" 2984 + } 2985 + ], 2986 + "cellTypeConfigs": [ 2987 + { 2988 + "cellType": "DISTANCE" 2989 + }, 2990 + { 2991 + "cellType": "DURATION" 2992 + } 2993 + ], 2994 + "isGlobal": true, 2995 + "measurementType": "EXERCISE" 2996 + }, 2997 + { 2998 + "_links": { 2999 + "self": { 3000 + "href": "/api/measurements/bb94b95b-ecb0-4b90-94e3-8f6e557f774b" 3001 + }, 3002 + "tag": [ 3003 + { 3004 + "href": "/api/tags/core" 3005 + } 3006 + ] 3007 + }, 3008 + "id": "bb94b95b-ecb0-4b90-94e3-8f6e557f774b", 3009 + "created": "2018-04-27T07:04:36.337Z", 3010 + "lastChanged": "2018-09-27T08:49:55.244Z", 3011 + "name": { 3012 + "en": "Crunch (Machine)" 3013 + }, 3014 + "instructions": { 3015 + "en": "Sit down at the machine and adjust the seat height so that your arms are bent at a 90 degree angle as you rest your triceps on the machine pads. This is your starting position.||While keeping a firm grip on the handle, crunch the weight as you simultaneously bring your legs closer to your upper torso. Focus on using your abs to move the weight and keeping your legs as relaxed as possible.||Slowly return to the starting position in a controlled motion.||Repeat for reps." 3016 + }, 3017 + "media": [ 3018 + { 3019 + "url": "https://files.strong.app/users/global/IMGssAHfgQRgf.jpg", 3020 + "type": "IMAGE", 3021 + "contentType": "image/jpeg" 3022 + }, 3023 + { 3024 + "url": "https://files.strong.app/users/global/THUssAHfgQRgf%403x.png", 3025 + "type": "THUMBNAIL", 3026 + "contentType": "image/png" 3027 + } 3028 + ], 3029 + "cellTypeConfigs": [ 3030 + { 3031 + "cellType": "OTHER_WEIGHT", 3032 + "mandatory": true 3033 + }, 3034 + { 3035 + "cellType": "REPS", 3036 + "mandatory": true 3037 + }, 3038 + { 3039 + "cellType": "RPE", 3040 + "isExponent": true 3041 + } 3042 + ], 3043 + "isGlobal": true, 3044 + "measurementType": "EXERCISE" 3045 + }, 3046 + { 3047 + "_links": { 3048 + "self": { 3049 + "href": "/api/measurements/9ecccc7c-1846-4f58-8b63-fe4694915296" 3050 + }, 3051 + "tag": [ 3052 + { 3053 + "href": "/api/tags/core" 3054 + } 3055 + ] 3056 + }, 3057 + "id": "9ecccc7c-1846-4f58-8b63-fe4694915296", 3058 + "created": "2018-04-27T07:04:18.238Z", 3059 + "lastChanged": "2018-10-15T05:53:02.576Z", 3060 + "name": { 3061 + "en": "Cross Body Crunch" 3062 + }, 3063 + "instructions": { 3064 + "en": "Lie flat on your back with your knees bent at about 60 degrees. With your feet flat on the floor, place your hands loosely behind your head. This is your starting position.||Crunch your upper torso and bring your right elbow across your body while simultaneously bringing your left knee towards your elbow at the same time. Make sure you contract the abs throughout the movement instead of simply moving your elbow.||Return to the starting position, and repeat the movement with the opposite side.||Repeat for reps." 3065 + }, 3066 + "media": [ 3067 + { 3068 + "url": "https://files.strong.app/users/global/IMG7E1CSmXEnl.jpg", 3069 + "type": "IMAGE", 3070 + "contentType": "image/jpeg" 3071 + }, 3072 + { 3073 + "url": "https://files.strong.app/users/global/THU7E1CSmXEnl%403x.png", 3074 + "type": "THUMBNAIL", 3075 + "contentType": "image/png" 3076 + } 3077 + ], 3078 + "cellTypeConfigs": [ 3079 + { 3080 + "cellType": "WEIGHTED_BODYWEIGHT" 3081 + }, 3082 + { 3083 + "cellType": "REPS", 3084 + "mandatory": true 3085 + }, 3086 + { 3087 + "cellType": "RPE", 3088 + "isExponent": true 3089 + } 3090 + ], 3091 + "isGlobal": true, 3092 + "measurementType": "EXERCISE" 3093 + }, 3094 + { 3095 + "_links": { 3096 + "self": { 3097 + "href": "/api/measurements/21ddb847-98cd-4f6c-bea5-1df51163973d" 3098 + }, 3099 + "tag": [ 3100 + { 3101 + "href": "/api/tags/legs" 3102 + } 3103 + ] 3104 + }, 3105 + "id": "21ddb847-98cd-4f6c-bea5-1df51163973d", 3106 + "created": "2018-04-27T07:03:59.828Z", 3107 + "lastChanged": "2018-10-15T06:10:33.091Z", 3108 + "name": { 3109 + "en": "Calf Press on Seated Leg Press" 3110 + }, 3111 + "instructions": { 3112 + "en": "NOTE: This exercise can be done with both legs at a time or one leg at a time.||Sit down on the leg press machine and place your legs on the platform at a shoulder width foot stance.||Lower the safety bars while holding the weighted platform in place with your feet, then press the sled all the way out until your legs are fully extended without locking your knees.||Place your feet so that only your toes are on the platform and your heels are extending off the sled. This is your starting position.||Press on the sled by raising your heels and extending your ankles as high as possible and flexing your calf. Both of your knees should be kept stationary at all times.||Breathe in and go back to the starting position by lowering your heels as you bend the ankles until calves are stretched.||Repeat for reps." 3113 + }, 3114 + "media": [ 3115 + { 3116 + "url": "https://files.strong.app/users/global/IMGEtNiOHW0ra.jpg", 3117 + "type": "IMAGE", 3118 + "contentType": "image/jpeg" 3119 + }, 3120 + { 3121 + "url": "https://files.strong.app/users/global/THUEtNiOHW0ra%403x.png", 3122 + "type": "THUMBNAIL", 3123 + "contentType": "image/png" 3124 + } 3125 + ], 3126 + "cellTypeConfigs": [ 3127 + { 3128 + "cellType": "OTHER_WEIGHT", 3129 + "mandatory": true 3130 + }, 3131 + { 3132 + "cellType": "REPS", 3133 + "mandatory": true 3134 + }, 3135 + { 3136 + "cellType": "RPE", 3137 + "isExponent": true 3138 + } 3139 + ], 3140 + "isGlobal": true, 3141 + "measurementType": "EXERCISE" 3142 + }, 3143 + { 3144 + "_links": { 3145 + "self": { 3146 + "href": "/api/measurements/819a0ba2-0a52-41f9-81dc-8f00c1f5a55d" 3147 + }, 3148 + "tag": [ 3149 + { 3150 + "href": "/api/tags/legs" 3151 + } 3152 + ] 3153 + }, 3154 + "id": "819a0ba2-0a52-41f9-81dc-8f00c1f5a55d", 3155 + "created": "2018-04-27T07:03:47.334Z", 3156 + "lastChanged": "2018-10-15T06:10:31.69Z", 3157 + "name": { 3158 + "en": "Calf Press on Leg Press" 3159 + }, 3160 + "instructions": { 3161 + "en": "NOTE: This exercise can be done with both legs at a time or one leg at a time.||Sit down on the leg press machine and place your legs on the platform at a shoulder width foot stance.||Lower the safety bars while holding the weighted platform in place with your feet, then press the sled all the way up until your legs are fully extended without locking your knees. Your torso and the legs should make perfect 90-degree angle.||Place your feet so that only your toes are on the platform and your heels are extending off the sled. This is your starting position.||Press on the sled by raising your heels and extending your ankles as high as possible and flexing your calf. Both of your knees should be kept stationary at all times.||Breathe in and go back to the starting position by lowering your heels as you bend the ankles until calves are stretched.||Repeat for reps." 3162 + }, 3163 + "media": [ 3164 + { 3165 + "url": "https://files.strong.app/users/global/IMGNyW1k6j3hV.jpg", 3166 + "type": "IMAGE", 3167 + "contentType": "image/jpeg" 3168 + }, 3169 + { 3170 + "url": "https://files.strong.app/users/global/VIDNyW1k6j3hV.mp4", 3171 + "type": "VIDEO", 3172 + "contentType": "video/mp4" 3173 + }, 3174 + { 3175 + "url": "https://files.strong.app/users/global/THUNyW1k6j3hV%403x.png", 3176 + "type": "THUMBNAIL", 3177 + "contentType": "image/png" 3178 + } 3179 + ], 3180 + "cellTypeConfigs": [ 3181 + { 3182 + "cellType": "OTHER_WEIGHT", 3183 + "mandatory": true 3184 + }, 3185 + { 3186 + "cellType": "REPS", 3187 + "mandatory": true 3188 + }, 3189 + { 3190 + "cellType": "RPE", 3191 + "isExponent": true 3192 + } 3193 + ], 3194 + "isGlobal": true, 3195 + "measurementType": "EXERCISE" 3196 + }, 3197 + { 3198 + "_links": { 3199 + "self": { 3200 + "href": "/api/measurements/c8fc2454-6b09-4e28-a762-397cca489fd2" 3201 + }, 3202 + "tag": [ 3203 + { 3204 + "href": "/api/tags/legs" 3205 + } 3206 + ] 3207 + }, 3208 + "id": "c8fc2454-6b09-4e28-a762-397cca489fd2", 3209 + "created": "2018-04-27T07:03:24.266Z", 3210 + "lastChanged": "2018-10-15T05:52:05.988Z", 3211 + "name": { 3212 + "en": "Cable Pull Through" 3213 + }, 3214 + "instructions": { 3215 + "en": "Adjust the pulley height so that it's close to the floor with a rope attached.||Face away from the machine and grab the rope while straddling the cable between your legs. This is your starting position.||Bend over at the hips while keeping a tight grip on the rope and reaching through your legs as far as you possible can.||Return to the starting position by squeezing your glutes -- avoid pulling upward with your shoulders, as the entire motion should originate through the hips.||Repeat for reps." 3216 + }, 3217 + "media": [ 3218 + { 3219 + "url": "https://files.strong.app/users/global/IMGpTOKLwUGZP.jpg", 3220 + "type": "IMAGE", 3221 + "contentType": "image/jpeg" 3222 + }, 3223 + { 3224 + "url": "https://files.strong.app/users/global/THUpTOKLwUGZP%403x.png", 3225 + "type": "THUMBNAIL", 3226 + "contentType": "image/png" 3227 + } 3228 + ], 3229 + "cellTypeConfigs": [ 3230 + { 3231 + "cellType": "OTHER_WEIGHT", 3232 + "mandatory": true 3233 + }, 3234 + { 3235 + "cellType": "REPS", 3236 + "mandatory": true 3237 + }, 3238 + { 3239 + "cellType": "RPE", 3240 + "isExponent": true 3241 + } 3242 + ], 3243 + "isGlobal": true, 3244 + "measurementType": "EXERCISE" 3245 + }, 3246 + { 3247 + "_links": { 3248 + "self": { 3249 + "href": "/api/measurements/b45be635-5eac-4d46-8071-607c1b1834cc" 3250 + }, 3251 + "tag": [ 3252 + { 3253 + "href": "/api/tags/arms" 3254 + } 3255 + ] 3256 + }, 3257 + "id": "b45be635-5eac-4d46-8071-607c1b1834cc", 3258 + "created": "2018-04-27T07:02:59.353Z", 3259 + "lastChanged": "2018-10-15T05:51:37.536Z", 3260 + "name": { 3261 + "en": "Cable Kickback" 3262 + }, 3263 + "instructions": { 3264 + "en": "Slightly bend over while keeping your back as straight as possible.||While keeping your upper arms close to your torso, grab the cable attachment while bending at the elbows. This is your starting position.||While keeping your elbow in place, extend your arm as straight as possible.||Squeeze the triceps and pause briefly, then slowly lower the weight back down to the starting position.||Repeat for reps." 3265 + }, 3266 + "media": [ 3267 + { 3268 + "url": "https://files.strong.app/users/global/IMGvt2ZDMDLZG.jpg", 3269 + "type": "IMAGE", 3270 + "contentType": "image/jpeg" 3271 + }, 3272 + { 3273 + "url": "https://files.strong.app/users/global/THUvt2ZDMDLZG%403x.png", 3274 + "type": "THUMBNAIL", 3275 + "contentType": "image/png" 3276 + } 3277 + ], 3278 + "cellTypeConfigs": [ 3279 + { 3280 + "cellType": "OTHER_WEIGHT", 3281 + "mandatory": true 3282 + }, 3283 + { 3284 + "cellType": "REPS", 3285 + "mandatory": true 3286 + }, 3287 + { 3288 + "cellType": "RPE", 3289 + "isExponent": true 3290 + } 3291 + ], 3292 + "isGlobal": true, 3293 + "measurementType": "EXERCISE" 3294 + }, 3295 + { 3296 + "_links": { 3297 + "self": { 3298 + "href": "/api/measurements/70709ccd-1f01-4725-98ad-193d2004babf" 3299 + }, 3300 + "tag": [ 3301 + { 3302 + "href": "/api/tags/arms" 3303 + } 3304 + ] 3305 + }, 3306 + "id": "70709ccd-1f01-4725-98ad-193d2004babf", 3307 + "created": "2018-04-27T07:01:57.735Z", 3308 + "lastChanged": "2018-10-15T05:51:11.805Z", 3309 + "name": { 3310 + "en": "Bicep Curl (Cable)" 3311 + }, 3312 + "instructions": { 3313 + "en": "NOTE: This exercise can also be done one arm at a time depending on the cable grip you choose to use.||Stand while holding the bar at shoulder width with an underhand grip and elbows touching the side of the torso.||Holding the upper arm stationary, curl barbell up with palm facing forward. Lift the bar towards the shoulder until the bicep is fully contracted. Hold this position for a second and squeeze the bicep.||Lower the bar to the starting position.||Repeat for reps." 3314 + }, 3315 + "media": [ 3316 + { 3317 + "url": "https://files.strong.app/users/global/IMGG4mxCu6iaZ.jpg", 3318 + "type": "IMAGE", 3319 + "contentType": "image/jpeg" 3320 + }, 3321 + { 3322 + "url": "https://files.strong.app/users/global/VIDG4mxCu6iaZ.mp4", 3323 + "type": "VIDEO", 3324 + "contentType": "video/mp4" 3325 + }, 3326 + { 3327 + "url": "https://files.strong.app/users/global/THUG4mxCu6iaZ%403x.png", 3328 + "type": "THUMBNAIL", 3329 + "contentType": "image/png" 3330 + } 3331 + ], 3332 + "cellTypeConfigs": [ 3333 + { 3334 + "cellType": "OTHER_WEIGHT", 3335 + "mandatory": true 3336 + }, 3337 + { 3338 + "cellType": "REPS", 3339 + "mandatory": true 3340 + }, 3341 + { 3342 + "cellType": "RPE", 3343 + "isExponent": true 3344 + } 3345 + ], 3346 + "isGlobal": true, 3347 + "measurementType": "EXERCISE" 3348 + }, 3349 + { 3350 + "_links": { 3351 + "self": { 3352 + "href": "/api/measurements/860bcb49-7f45-4212-9441-e9497e1220fc" 3353 + }, 3354 + "tag": [ 3355 + { 3356 + "href": "/api/tags/back" 3357 + } 3358 + ] 3359 + }, 3360 + "id": "860bcb49-7f45-4212-9441-e9497e1220fc", 3361 + "created": "2018-04-27T07:01:46.786Z", 3362 + "lastChanged": "2018-10-15T05:50:45.983Z", 3363 + "name": { 3364 + "en": "Bent Over One Arm Row (Dumbbell)" 3365 + }, 3366 + "instructions": { 3367 + "en": "Kneel over side of bench by placing knee and hand of supporting arm on bench.||Grab the dumbbell from the floor while keeping a straight back.||Flexing the core, keep head in neutral position and pull the dumbbell towards your stomach.||Squeeze your back as you breath out at the top position.||Lower the barbell to the starting position.||Repeat for reps." 3368 + }, 3369 + "media": [ 3370 + { 3371 + "url": "https://files.strong.app/users/global/IMGRkvrk4wzTd.jpg", 3372 + "type": "IMAGE", 3373 + "contentType": "image/jpeg" 3374 + }, 3375 + { 3376 + "url": "https://files.strong.app/users/global/VIDRkvrk4wzTd.mp4", 3377 + "type": "VIDEO", 3378 + "contentType": "video/mp4" 3379 + }, 3380 + { 3381 + "url": "https://files.strong.app/users/global/THURkvrk4wzTd%403x.png", 3382 + "type": "THUMBNAIL", 3383 + "contentType": "image/png" 3384 + } 3385 + ], 3386 + "cellTypeConfigs": [ 3387 + { 3388 + "cellType": "DUMBBELL_WEIGHT", 3389 + "mandatory": true 3390 + }, 3391 + { 3392 + "cellType": "REPS", 3393 + "mandatory": true 3394 + }, 3395 + { 3396 + "cellType": "RPE", 3397 + "isExponent": true 3398 + } 3399 + ], 3400 + "isGlobal": true, 3401 + "measurementType": "EXERCISE" 3402 + }, 3403 + { 3404 + "_links": { 3405 + "self": { 3406 + "href": "/api/measurements/fbbd32d2-595a-4c4a-86de-05a06ef12908" 3407 + }, 3408 + "tag": [ 3409 + { 3410 + "href": "/api/tags/arms" 3411 + } 3412 + ] 3413 + }, 3414 + "id": "fbbd32d2-595a-4c4a-86de-05a06ef12908", 3415 + "created": "2018-04-27T06:59:30.246Z", 3416 + "lastChanged": "2018-10-15T05:50:24.117Z", 3417 + "name": { 3418 + "en": "Bench Dip" 3419 + }, 3420 + "instructions": { 3421 + "en": "NOTE: To increase the difficulty for this exercise, have an exercise partner place a weight plate on your lap.||Place a bench behind your back and hold on to its edge with your hands fully extended at around shoulder width. The legs will be extended forward while you're bent at the waist. This is your starting position.||Slowly lower your body by bending at the elbows until your arms are close to a 90 degree angle. Keep your elbows as close as possible to your torso throughout the movement.||Use your triceps to bring your torso up and back to the starting position.||Repeat for reps." 3422 + }, 3423 + "media": [ 3424 + { 3425 + "url": "https://files.strong.app/users/global/IMG0jeSSwxnS3.jpg", 3426 + "type": "IMAGE", 3427 + "contentType": "image/jpeg" 3428 + }, 3429 + { 3430 + "url": "https://files.strong.app/users/global/THU0jeSSwxnS3%403x.png", 3431 + "type": "THUMBNAIL", 3432 + "contentType": "image/png" 3433 + } 3434 + ], 3435 + "cellTypeConfigs": [ 3436 + { 3437 + "cellType": "WEIGHTED_BODYWEIGHT" 3438 + }, 3439 + { 3440 + "cellType": "REPS", 3441 + "mandatory": true 3442 + }, 3443 + { 3444 + "cellType": "RPE", 3445 + "isExponent": true 3446 + } 3447 + ], 3448 + "isGlobal": true, 3449 + "measurementType": "EXERCISE" 3450 + }, 3451 + { 3452 + "_links": { 3453 + "self": { 3454 + "href": "/api/measurements/1263f3d4-4ab0-4b59-a65a-626516ca87ab" 3455 + }, 3456 + "tag": [ 3457 + { 3458 + "href": "/api/tags/legs" 3459 + } 3460 + ] 3461 + }, 3462 + "id": "1263f3d4-4ab0-4b59-a65a-626516ca87ab", 3463 + "created": "2018-01-22T05:41:00.101Z", 3464 + "lastChanged": "2018-09-20T08:28:25.484Z", 3465 + "name": { 3466 + "en": "Zercher Squat (Barbell)" 3467 + }, 3468 + "instructions": { 3469 + "en": "Set up the barbell on the rack at lower chest level. Extend your forearms out in front of your body (bent at elbows) and place the bar on top of upper forearms.||Lift bar and step backwards to a squat position. Place feet shoulder width apart and descend by breaking at the hips and sitting backwards.||Keep the head in a neutral position, back and spine in a straight and neutral position, the core flexed and knees pushed slightly outwards.||Descend to the bottom where thighs are parallel to the floor.||Push through the heel and middle foot to bring yourself back to starting position.||Repeat for reps." 3470 + }, 3471 + "media": [ 3472 + { 3473 + "url": "https://files.strong.app/users/global/IMGMJnwkggkqX.jpg", 3474 + "type": "IMAGE", 3475 + "contentType": "image/jpeg" 3476 + }, 3477 + { 3478 + "url": "https://files.strong.app/users/global/THUMJnwkggkqX%403x.png", 3479 + "type": "THUMBNAIL", 3480 + "contentType": "image/png" 3481 + } 3482 + ], 3483 + "cellTypeConfigs": [ 3484 + { 3485 + "cellType": "BARBELL_WEIGHT", 3486 + "mandatory": true 3487 + }, 3488 + { 3489 + "cellType": "REPS", 3490 + "mandatory": true 3491 + }, 3492 + { 3493 + "cellType": "RPE", 3494 + "isExponent": true 3495 + } 3496 + ], 3497 + "isGlobal": true, 3498 + "measurementType": "EXERCISE" 3499 + }, 3500 + { 3501 + "_links": { 3502 + "self": { 3503 + "href": "/api/measurements/f33643ea-6cc0-4966-8b1a-b87696015072" 3504 + }, 3505 + "tag": [ 3506 + { 3507 + "href": "/api/tags/arms" 3508 + } 3509 + ] 3510 + }, 3511 + "id": "f33643ea-6cc0-4966-8b1a-b87696015072", 3512 + "created": "2018-01-22T05:40:56.987Z", 3513 + "lastChanged": "2018-09-27T07:34:56.008Z", 3514 + "name": { 3515 + "en": "Wrist Roller" 3516 + }, 3517 + "instructions": { 3518 + "en": "With a pronated grip and feet shoulder with apart, extend arms forward in front.||Rotate wrists to reel weighted rope around the horizontal bar.||Once weight has reached the top, reverse wrist rotation to lower weight.||Repeat for reps or time." 3519 + }, 3520 + "media": [ 3521 + { 3522 + "url": "https://files.strong.app/users/global/IMGZrU2uhPxBU.jpg", 3523 + "type": "IMAGE", 3524 + "contentType": "image/jpeg" 3525 + }, 3526 + { 3527 + "url": "https://files.strong.app/users/global/THUZrU2uhPxBU%403x.png", 3528 + "type": "THUMBNAIL", 3529 + "contentType": "image/png" 3530 + } 3531 + ], 3532 + "cellTypeConfigs": [ 3533 + { 3534 + "cellType": "OTHER_WEIGHT", 3535 + "mandatory": true 3536 + }, 3537 + { 3538 + "cellType": "REPS", 3539 + "mandatory": true 3540 + }, 3541 + { 3542 + "cellType": "RPE", 3543 + "isExponent": true 3544 + } 3545 + ], 3546 + "isGlobal": true, 3547 + "measurementType": "EXERCISE" 3548 + }, 3549 + { 3550 + "_links": { 3551 + "self": { 3552 + "href": "/api/measurements/bea508fb-4d1b-4320-8b34-20502785c6ec" 3553 + }, 3554 + "tag": [ 3555 + { 3556 + "href": "/api/tags/back" 3557 + } 3558 + ] 3559 + }, 3560 + "id": "bea508fb-4d1b-4320-8b34-20502785c6ec", 3561 + "created": "2018-01-22T05:40:53.554Z", 3562 + "lastChanged": "2018-09-20T08:28:54.162Z", 3563 + "name": { 3564 + "en": "Wide Pull Up" 3565 + }, 3566 + "instructions": { 3567 + "en": "Hold the pull up bar with a wider than shoulder overhand grip with arms fully extended.||Retract scapula and pull upward by bringing chest to the bar.||Pause at the top and squeeze the back before lowering slowly to the starting position.||Repeat for reps." 3568 + }, 3569 + "media": [ 3570 + { 3571 + "url": "https://files.strong.app/users/global/IMGtrIlyTSoHy.jpg", 3572 + "type": "IMAGE", 3573 + "contentType": "image/jpeg" 3574 + }, 3575 + { 3576 + "url": "https://files.strong.app/users/global/VIDtrIlyTSoHy.mp4", 3577 + "type": "VIDEO", 3578 + "contentType": "video/mp4" 3579 + }, 3580 + { 3581 + "url": "https://files.strong.app/users/global/THUtrIlyTSoHy%403x.png", 3582 + "type": "THUMBNAIL", 3583 + "contentType": "image/png" 3584 + } 3585 + ], 3586 + "cellTypeConfigs": [ 3587 + { 3588 + "cellType": "WEIGHTED_BODYWEIGHT" 3589 + }, 3590 + { 3591 + "cellType": "REPS", 3592 + "mandatory": true 3593 + }, 3594 + { 3595 + "cellType": "RPE", 3596 + "isExponent": true 3597 + } 3598 + ], 3599 + "isGlobal": true, 3600 + "measurementType": "EXERCISE" 3601 + }, 3602 + { 3603 + "_links": { 3604 + "self": { 3605 + "href": "/api/measurements/6b6456e0-3725-4a0a-8306-1bd555f4e5b5" 3606 + }, 3607 + "tag": [ 3608 + { 3609 + "href": "/api/tags/chest" 3610 + } 3611 + ] 3612 + }, 3613 + "id": "6b6456e0-3725-4a0a-8306-1bd555f4e5b5", 3614 + "created": "2018-01-22T05:40:49.742Z", 3615 + "lastChanged": "2018-09-27T07:34:12.806Z", 3616 + "name": { 3617 + "en": "Bench Press - Wide Grip (Barbell)" 3618 + }, 3619 + "instructions": { 3620 + "en": "Lie on the bench with feet firm on the floor, hold the bar slightly outside of shoulder width.||Lift the bar off the rack above the chest with arms straight.||Retract scapula and have elbows between 45 to 90 degree angle. An advanced tip is to tuck the shoulders down into the sockets and driven back.||Breathe in and lower bar to the middle chest.||After pausing at the bottom, push the bar towards the starting position squeezing the chest.||Repeat for reps." 3621 + }, 3622 + "media": [ 3623 + { 3624 + "url": "https://files.strong.app/users/global/IMG6CsG2PDwiT.jpg", 3625 + "type": "IMAGE", 3626 + "contentType": "image/jpeg" 3627 + }, 3628 + { 3629 + "url": "https://files.strong.app/users/global/VID6CsG2PDwiT.mp4", 3630 + "type": "VIDEO", 3631 + "contentType": "video/mp4" 3632 + }, 3633 + { 3634 + "url": "https://files.strong.app/users/global/THU6CsG2PDwiT%403x.png", 3635 + "type": "THUMBNAIL", 3636 + "contentType": "image/png" 3637 + } 3638 + ], 3639 + "cellTypeConfigs": [ 3640 + { 3641 + "cellType": "BARBELL_WEIGHT", 3642 + "mandatory": true 3643 + }, 3644 + { 3645 + "cellType": "REPS", 3646 + "mandatory": true 3647 + }, 3648 + { 3649 + "cellType": "RPE", 3650 + "isExponent": true 3651 + } 3652 + ], 3653 + "isGlobal": true, 3654 + "measurementType": "EXERCISE" 3655 + }, 3656 + { 3657 + "_links": { 3658 + "self": { 3659 + "href": "/api/measurements/2f413df1-9169-4b49-bc97-be82ae29b0a5" 3660 + }, 3661 + "tag": [ 3662 + { 3663 + "href": "/api/tags/back" 3664 + } 3665 + ] 3666 + }, 3667 + "id": "2f413df1-9169-4b49-bc97-be82ae29b0a5", 3668 + "created": "2018-01-22T05:40:43.424Z", 3669 + "lastChanged": "2018-09-27T07:33:47.347Z", 3670 + "name": { 3671 + "en": "Lat Pulldown - Underhand (Band)" 3672 + }, 3673 + "instructions": { 3674 + "en": "Secure a band in an elevated position and sit on a bench or ground.||Grip the handles with a supinated grip slightly outside of shoulder width.||As you exhale, pull the handles down until it touches the upper chest.||Pause and squeeze the back muscles.||Slowly bring the bar back to the starting position with the lats fully stretched.||Repeat for reps." 3675 + }, 3676 + "media": [ 3677 + { 3678 + "url": "https://files.strong.app/users/global/IMGvR7vdvDHA1.jpg", 3679 + "type": "IMAGE", 3680 + "contentType": "image/jpeg" 3681 + }, 3682 + { 3683 + "url": "https://files.strong.app/users/global/THUvR7vdvDHA1%403x.png", 3684 + "type": "THUMBNAIL", 3685 + "contentType": "image/png" 3686 + } 3687 + ], 3688 + "cellTypeConfigs": [ 3689 + { 3690 + "cellType": "WEIGHTED_BODYWEIGHT" 3691 + }, 3692 + { 3693 + "cellType": "REPS", 3694 + "mandatory": true 3695 + }, 3696 + { 3697 + "cellType": "RPE", 3698 + "isExponent": true 3699 + } 3700 + ], 3701 + "isGlobal": true, 3702 + "measurementType": "EXERCISE" 3703 + }, 3704 + { 3705 + "_links": { 3706 + "self": { 3707 + "href": "/api/measurements/6f66b6ce-846b-4f1c-b1ce-dd0fc0f542c2" 3708 + }, 3709 + "tag": [ 3710 + { 3711 + "href": "/api/tags/back" 3712 + } 3713 + ] 3714 + }, 3715 + "id": "6f66b6ce-846b-4f1c-b1ce-dd0fc0f542c2", 3716 + "created": "2018-01-22T05:40:38.883Z", 3717 + "lastChanged": "2018-09-27T07:32:45.08Z", 3718 + "name": { 3719 + "en": "Bent Over Row - Underhand (Barbell)" 3720 + }, 3721 + "instructions": { 3722 + "en": "Holding the barbell with a supinated grip, bend the legs and tilt the torso with a straight back.||Flexing the core, keep head in neutral position, pull the barbell towards your stomach.||Squeeze your back as you breath out at the top position.||Inhale and lower the barbell to the starting position.||Repeat for reps." 3723 + }, 3724 + "media": [ 3725 + { 3726 + "url": "https://files.strong.app/users/global/IMGKgptOl60wY.jpg", 3727 + "type": "IMAGE", 3728 + "contentType": "image/jpeg" 3729 + }, 3730 + { 3731 + "url": "https://files.strong.app/users/global/THUKgptOl60wY%403x.png", 3732 + "type": "THUMBNAIL", 3733 + "contentType": "image/png" 3734 + } 3735 + ], 3736 + "cellTypeConfigs": [ 3737 + { 3738 + "cellType": "BARBELL_WEIGHT", 3739 + "mandatory": true 3740 + }, 3741 + { 3742 + "cellType": "REPS", 3743 + "mandatory": true 3744 + }, 3745 + { 3746 + "cellType": "RPE", 3747 + "isExponent": true 3748 + } 3749 + ], 3750 + "isGlobal": true, 3751 + "measurementType": "EXERCISE" 3752 + }, 3753 + { 3754 + "_links": { 3755 + "self": { 3756 + "href": "/api/measurements/79a42fc3-5363-48d7-9fba-8e643d50bbd4" 3757 + }, 3758 + "tag": [ 3759 + { 3760 + "href": "/api/tags/arms" 3761 + } 3762 + ] 3763 + }, 3764 + "id": "79a42fc3-5363-48d7-9fba-8e643d50bbd4", 3765 + "created": "2018-01-22T05:40:35.634Z", 3766 + "lastChanged": "2018-11-07T06:27:42.561Z", 3767 + "name": { 3768 + "en": "Triceps Pushdown (Cable - Straight Bar)" 3769 + }, 3770 + "instructions": { 3771 + "en": "Adjust pulley height so the handles are at around chest height.||Grasp the cable attachment with a narrow overhand grip and position your elbows next to your torso.||Extend your arms down until arms are straight and triceps are fully extended.||Return to starting position.||Repeat for reps." 3772 + }, 3773 + "media": [ 3774 + { 3775 + "url": "https://files.strong.app/users/global/IMGGBVEhxLCp8.jpg", 3776 + "type": "IMAGE", 3777 + "contentType": "image/jpeg" 3778 + }, 3779 + { 3780 + "url": "https://files.strong.app/users/global/THUGBVEhxLCp8%403x.png", 3781 + "type": "THUMBNAIL", 3782 + "contentType": "image/png" 3783 + } 3784 + ], 3785 + "cellTypeConfigs": [ 3786 + { 3787 + "cellType": "OTHER_WEIGHT", 3788 + "mandatory": true 3789 + }, 3790 + { 3791 + "cellType": "REPS", 3792 + "mandatory": true 3793 + }, 3794 + { 3795 + "cellType": "RPE", 3796 + "isExponent": true 3797 + } 3798 + ], 3799 + "isGlobal": true, 3800 + "measurementType": "EXERCISE" 3801 + }, 3802 + { 3803 + "_links": { 3804 + "self": { 3805 + "href": "/api/measurements/8b2c7487-28e7-48c3-8d07-1ad83cc7133c" 3806 + }, 3807 + "tag": [ 3808 + { 3809 + "href": "/api/tags/legs" 3810 + } 3811 + ] 3812 + }, 3813 + "id": "8b2c7487-28e7-48c3-8d07-1ad83cc7133c", 3814 + "created": "2018-01-22T05:40:32.387Z", 3815 + "lastChanged": "2018-09-27T07:30:43.014Z", 3816 + "name": { 3817 + "en": "Straight Leg Deadlift (Band)" 3818 + }, 3819 + "instructions": { 3820 + "en": "Secure the band under the midfoot and hold handles in each hand.||Lower hips and have minimal bend in the knees. Lift the chest and take a deep breath to brace the core (should be braced the entire movement). Retract shoulder blades and hold the handles in front of your shins.||Pull the handles upward extending hips and straightening the torso.||Return to the starting position by breaking at the hips.||Repeat for reps." 3821 + }, 3822 + "media": [ 3823 + { 3824 + "url": "https://files.strong.app/users/global/IMGThYVAeITY2.jpg", 3825 + "type": "IMAGE", 3826 + "contentType": "image/jpeg" 3827 + }, 3828 + { 3829 + "url": "https://files.strong.app/users/global/THUThYVAeITY2%403x.png", 3830 + "type": "THUMBNAIL", 3831 + "contentType": "image/png" 3832 + } 3833 + ], 3834 + "cellTypeConfigs": [ 3835 + { 3836 + "cellType": "WEIGHTED_BODYWEIGHT" 3837 + }, 3838 + { 3839 + "cellType": "REPS", 3840 + "mandatory": true 3841 + }, 3842 + { 3843 + "cellType": "RPE", 3844 + "isExponent": true 3845 + } 3846 + ], 3847 + "isGlobal": true, 3848 + "measurementType": "EXERCISE" 3849 + }, 3850 + { 3851 + "_links": { 3852 + "self": { 3853 + "href": "/api/measurements/b1827979-7d0e-4d6f-8498-c0b3fb1fe187" 3854 + }, 3855 + "tag": [ 3856 + { 3857 + "href": "/api/tags/legs" 3858 + } 3859 + ] 3860 + }, 3861 + "id": "b1827979-7d0e-4d6f-8498-c0b3fb1fe187", 3862 + "created": "2018-01-22T05:40:25.863Z", 3863 + "lastChanged": "2018-09-27T07:28:28.263Z", 3864 + "name": { 3865 + "en": "Step-up" 3866 + }, 3867 + "instructions": { 3868 + "en": "Stand facing platform of appropriate height.||Step onto the platform with the full foot.||Driving from the heel and middle foot of the elevated leg and bring both feet onto the platform.||Slowly descend back to the starting position.||Repeat for reps." 3869 + }, 3870 + "media": [ 3871 + { 3872 + "url": "https://files.strong.app/users/global/IMGRZhlC02mS8.jpg", 3873 + "type": "IMAGE", 3874 + "contentType": "image/jpeg" 3875 + }, 3876 + { 3877 + "url": "https://files.strong.app/users/global/THURZhlC02mS8%403x.png", 3878 + "type": "THUMBNAIL", 3879 + "contentType": "image/png" 3880 + } 3881 + ], 3882 + "cellTypeConfigs": [ 3883 + { 3884 + "cellType": "REPS", 3885 + "mandatory": true 3886 + }, 3887 + { 3888 + "cellType": "RPE", 3889 + "isExponent": true 3890 + } 3891 + ], 3892 + "isGlobal": true, 3893 + "measurementType": "EXERCISE" 3894 + }, 3895 + { 3896 + "_links": { 3897 + "self": { 3898 + "href": "/api/measurements/0f71ee4c-5dad-4617-8e8d-e8e133afc2c1" 3899 + }, 3900 + "tag": [ 3901 + { 3902 + "href": "/api/tags/legs" 3903 + } 3904 + ] 3905 + }, 3906 + "id": "0f71ee4c-5dad-4617-8e8d-e8e133afc2c1", 3907 + "created": "2018-01-22T05:40:14.791Z", 3908 + "lastChanged": "2018-09-27T07:27:30.839Z", 3909 + "name": { 3910 + "en": "Squat (Band)" 3911 + }, 3912 + "instructions": { 3913 + "en": "Stand with feet shoulder width apart and bands under the mid foot.||Hold band handles at shoulder level squeezing shoulder blades together and keeping core flexed.||Descend by breaking at the hips and sitting backward.||Lower until thighs are parallel with the floor. ||Keep weight on the heel and mid-foot, drive upward to the starting position.||Repeat for reps." 3914 + }, 3915 + "media": [ 3916 + { 3917 + "url": "https://files.strong.app/users/global/IMGRpjDQkFCmV.jpg", 3918 + "type": "IMAGE", 3919 + "contentType": "image/jpeg" 3920 + }, 3921 + { 3922 + "url": "https://files.strong.app/users/global/THURpjDQkFCmV%403x.png", 3923 + "type": "THUMBNAIL", 3924 + "contentType": "image/png" 3925 + } 3926 + ], 3927 + "cellTypeConfigs": [ 3928 + { 3929 + "cellType": "WEIGHTED_BODYWEIGHT" 3930 + }, 3931 + { 3932 + "cellType": "REPS", 3933 + "mandatory": true 3934 + }, 3935 + { 3936 + "cellType": "RPE", 3937 + "isExponent": true 3938 + } 3939 + ], 3940 + "isGlobal": true, 3941 + "measurementType": "EXERCISE" 3942 + }, 3943 + { 3944 + "_links": { 3945 + "self": { 3946 + "href": "/api/measurements/237314ed-ead7-406c-92db-a20de0a9166f" 3947 + }, 3948 + "tag": [ 3949 + { 3950 + "href": "/api/tags/arms" 3951 + } 3952 + ] 3953 + }, 3954 + "id": "237314ed-ead7-406c-92db-a20de0a9166f", 3955 + "created": "2018-01-22T05:39:47.749Z", 3956 + "lastChanged": "2018-09-27T07:27:14.532Z", 3957 + "name": { 3958 + "en": "Skullcrusher (Dumbbell)" 3959 + }, 3960 + "instructions": { 3961 + "en": "Sit down on a flat bench with the barbell on your lap.||Raise the dumbbells up to shoulder height by kicking your knees up.||While holding the dumbbells in place, lie down on the bench with your arms fully extended and the weights directly above your shoulders.||Lower the weights bending your elbows until the dumbbells are positioned to the side of your head. Make sure your elbows stay in place and that you slow your descent as the weight approaches your head.||Push the bar back up to starting position.||Repeat for reps." 3962 + }, 3963 + "media": [ 3964 + { 3965 + "url": "https://files.strong.app/users/global/IMGa7jw8QRrQu.jpg", 3966 + "type": "IMAGE", 3967 + "contentType": "image/jpeg" 3968 + }, 3969 + { 3970 + "url": "https://files.strong.app/users/global/THUa7jw8QRrQu%403x.png", 3971 + "type": "THUMBNAIL", 3972 + "contentType": "image/png" 3973 + } 3974 + ], 3975 + "cellTypeConfigs": [ 3976 + { 3977 + "cellType": "DUMBBELL_WEIGHT", 3978 + "mandatory": true 3979 + }, 3980 + { 3981 + "cellType": "REPS", 3982 + "mandatory": true 3983 + }, 3984 + { 3985 + "cellType": "RPE", 3986 + "isExponent": true 3987 + } 3988 + ], 3989 + "isGlobal": true, 3990 + "measurementType": "EXERCISE" 3991 + }, 3992 + { 3993 + "_links": { 3994 + "self": { 3995 + "href": "/api/measurements/acaf0999-7976-48f6-a5fc-80c0d6d7bb67" 3996 + }, 3997 + "tag": [ 3998 + { 3999 + "href": "/api/tags/legs" 4000 + } 4001 + ] 4002 + }, 4003 + "id": "acaf0999-7976-48f6-a5fc-80c0d6d7bb67", 4004 + "created": "2018-01-22T05:39:41.936Z", 4005 + "lastChanged": "2018-09-27T07:26:40.662Z", 4006 + "name": { 4007 + "en": "Single Leg Bridge" 4008 + }, 4009 + "instructions": { 4010 + "en": "Support the body by the forearms and the toes on the floor while bracing the core.||The arms should be directly below the shoulder and the torso should be straight and flexed.||Extend one leg into the air and hold for time." 4011 + }, 4012 + "media": [ 4013 + { 4014 + "url": "https://files.strong.app/users/global/IMG6UVEE6IIU2.jpg", 4015 + "type": "IMAGE", 4016 + "contentType": "image/jpeg" 4017 + }, 4018 + { 4019 + "url": "https://files.strong.app/users/global/THU6UVEE6IIU2%403x.png", 4020 + "type": "THUMBNAIL", 4021 + "contentType": "image/png" 4022 + } 4023 + ], 4024 + "cellTypeConfigs": [ 4025 + { 4026 + "cellType": "WEIGHTED_BODYWEIGHT" 4027 + }, 4028 + { 4029 + "cellType": "REPS", 4030 + "mandatory": true 4031 + }, 4032 + { 4033 + "cellType": "RPE", 4034 + "isExponent": true 4035 + } 4036 + ], 4037 + "isGlobal": true, 4038 + "measurementType": "EXERCISE" 4039 + }, 4040 + { 4041 + "_links": { 4042 + "self": { 4043 + "href": "/api/measurements/f31e19c8-1671-40e4-9089-e341fffe7751" 4044 + }, 4045 + "tag": [ 4046 + { 4047 + "href": "/api/tags/back" 4048 + } 4049 + ] 4050 + }, 4051 + "id": "f31e19c8-1671-40e4-9089-e341fffe7751", 4052 + "created": "2018-01-22T05:39:32.637Z", 4053 + "lastChanged": "2018-09-27T07:25:52.787Z", 4054 + "name": { 4055 + "en": "Shrug (Smith Machine)" 4056 + }, 4057 + "instructions": { 4058 + "en": "Set the starting bar height at the middle thigh.||Hold bar with pronated grip at shoulder width.||While exhaling, contract the trap muscles and elevate the bar.||Hold at the upper position and lower back to the starting position while exhaling.||Repeat for reps." 4059 + }, 4060 + "media": [ 4061 + { 4062 + "url": "https://files.strong.app/users/global/IMGON6HTP38c8.jpg", 4063 + "type": "IMAGE", 4064 + "contentType": "image/jpeg" 4065 + }, 4066 + { 4067 + "url": "https://files.strong.app/users/global/VIDON6HTP38c8.mp4", 4068 + "type": "VIDEO", 4069 + "contentType": "video/mp4" 4070 + }, 4071 + { 4072 + "url": "https://files.strong.app/users/global/THUON6HTP38c8%403x.png", 4073 + "type": "THUMBNAIL", 4074 + "contentType": "image/png" 4075 + } 4076 + ], 4077 + "cellTypeConfigs": [ 4078 + { 4079 + "cellType": "OTHER_WEIGHT", 4080 + "mandatory": true 4081 + }, 4082 + { 4083 + "cellType": "REPS", 4084 + "mandatory": true 4085 + }, 4086 + { 4087 + "cellType": "RPE", 4088 + "isExponent": true 4089 + } 4090 + ], 4091 + "isGlobal": true, 4092 + "measurementType": "EXERCISE" 4093 + }, 4094 + { 4095 + "_links": { 4096 + "self": { 4097 + "href": "/api/measurements/caa35db9-e106-4915-840c-e7205f6e7228" 4098 + }, 4099 + "tag": [ 4100 + { 4101 + "href": "/api/tags/shoulders" 4102 + } 4103 + ] 4104 + }, 4105 + "id": "caa35db9-e106-4915-840c-e7205f6e7228", 4106 + "created": "2018-01-22T05:39:29.217Z", 4107 + "lastChanged": "2018-09-27T07:25:30.204Z", 4108 + "name": { 4109 + "en": "Shoulder Press (Plate Loaded)" 4110 + }, 4111 + "instructions": { 4112 + "en": "Load the Shoulder Press machine and grab the handles with elbows bent.||Flex core and push handles as you exhale and extend arms.||Contract shoulders at top of movement and return slowly to starting position.||Repeat for reps." 4113 + }, 4114 + "media": [ 4115 + { 4116 + "url": "https://files.strong.app/users/global/IMGVrNwEmBTP0.jpg", 4117 + "type": "IMAGE", 4118 + "contentType": "image/jpeg" 4119 + }, 4120 + { 4121 + "url": "https://files.strong.app/users/global/THUVrNwEmBTP0%403x.png", 4122 + "type": "THUMBNAIL", 4123 + "contentType": "image/png" 4124 + } 4125 + ], 4126 + "cellTypeConfigs": [ 4127 + { 4128 + "cellType": "OTHER_WEIGHT", 4129 + "mandatory": true 4130 + }, 4131 + { 4132 + "cellType": "REPS", 4133 + "mandatory": true 4134 + }, 4135 + { 4136 + "cellType": "RPE", 4137 + "isExponent": true 4138 + } 4139 + ], 4140 + "isGlobal": true, 4141 + "measurementType": "EXERCISE" 4142 + }, 4143 + { 4144 + "_links": { 4145 + "self": { 4146 + "href": "/api/measurements/8304df34-df61-423e-a9c9-f0cce6f16428" 4147 + }, 4148 + "tag": [ 4149 + { 4150 + "href": "/api/tags/arms" 4151 + } 4152 + ] 4153 + }, 4154 + "id": "8304df34-df61-423e-a9c9-f0cce6f16428", 4155 + "created": "2018-01-22T05:39:22.124Z", 4156 + "lastChanged": "2018-09-27T07:24:59.017Z", 4157 + "name": { 4158 + "en": "Seated Palms Up Wrist Curl (Dumbbell)" 4159 + }, 4160 + "instructions": { 4161 + "en": "Hold 2 dumbbells, resting forearms against the thighs, this is your starting position.||Curl your wrist upwards while exhaling, holding at the top.||Lower dumbbells slowly to the starting position while inhaling.||Repeat for reps." 4162 + }, 4163 + "media": [ 4164 + { 4165 + "url": "https://files.strong.app/users/global/IMG2vObYsXcwG.jpg", 4166 + "type": "IMAGE", 4167 + "contentType": "image/jpeg" 4168 + }, 4169 + { 4170 + "url": "https://files.strong.app/users/global/THU2vObYsXcwG%403x.png", 4171 + "type": "THUMBNAIL", 4172 + "contentType": "image/png" 4173 + } 4174 + ], 4175 + "cellTypeConfigs": [ 4176 + { 4177 + "cellType": "DUMBBELL_WEIGHT", 4178 + "mandatory": true 4179 + }, 4180 + { 4181 + "cellType": "REPS", 4182 + "mandatory": true 4183 + }, 4184 + { 4185 + "cellType": "RPE", 4186 + "isExponent": true 4187 + } 4188 + ], 4189 + "isGlobal": true, 4190 + "measurementType": "EXERCISE" 4191 + }, 4192 + { 4193 + "_links": { 4194 + "self": { 4195 + "href": "/api/measurements/5db8f3d7-445e-48bb-bf4b-979b6dfdb1eb" 4196 + }, 4197 + "tag": [ 4198 + { 4199 + "href": "/api/tags/shoulders" 4200 + } 4201 + ] 4202 + }, 4203 + "id": "5db8f3d7-445e-48bb-bf4b-979b6dfdb1eb", 4204 + "created": "2018-01-22T05:39:18.057Z", 4205 + "lastChanged": "2018-09-27T07:24:45.159Z", 4206 + "name": { 4207 + "en": "Seated Overhead Press (Dumbbell)" 4208 + }, 4209 + "instructions": { 4210 + "en": "Sitting in an upright bench place dumbbells on top of thighs.||Raise dumbbells to shoulder height and align dumbbells parallel to the shoulders.||Align elbow with dumbbell so that it is perpendicular to the group and press upward while exhaling.||Lower dumbbells to starting position slowly while inhaling.||Repeat for reps." 4211 + }, 4212 + "media": [ 4213 + { 4214 + "url": "https://files.strong.app/users/global/IMGsAdzKWrac3.jpg", 4215 + "type": "IMAGE", 4216 + "contentType": "image/jpeg" 4217 + }, 4218 + { 4219 + "url": "https://files.strong.app/users/global/VIDsAdzKWrac3.mp4", 4220 + "type": "VIDEO", 4221 + "contentType": "video/mp4" 4222 + }, 4223 + { 4224 + "url": "https://files.strong.app/users/global/THUsAdzKWrac3%403x.png", 4225 + "type": "THUMBNAIL", 4226 + "contentType": "image/png" 4227 + } 4228 + ], 4229 + "cellTypeConfigs": [ 4230 + { 4231 + "cellType": "DUMBBELL_WEIGHT", 4232 + "mandatory": true 4233 + }, 4234 + { 4235 + "cellType": "REPS", 4236 + "mandatory": true 4237 + }, 4238 + { 4239 + "cellType": "RPE", 4240 + "isExponent": true 4241 + } 4242 + ], 4243 + "isGlobal": true, 4244 + "measurementType": "EXERCISE" 4245 + }, 4246 + { 4247 + "_links": { 4248 + "self": { 4249 + "href": "/api/measurements/560e513c-9b0f-4375-a02d-464bd35fa054" 4250 + }, 4251 + "tag": [ 4252 + { 4253 + "href": "/api/tags/shoulders" 4254 + } 4255 + ] 4256 + }, 4257 + "id": "560e513c-9b0f-4375-a02d-464bd35fa054", 4258 + "created": "2018-01-22T05:39:14.581Z", 4259 + "lastChanged": "2018-09-27T07:24:24.713Z", 4260 + "name": { 4261 + "en": "Seated Overhead Press (Barbell)" 4262 + }, 4263 + "instructions": { 4264 + "en": "Sit on a military bench with the bar loaded behind the head.||With arms gripping at shoulder width, unrack the bar and lift over the head.||Lower the bar towards the upper chest while inhaling.||Push back to the starting position while exhaling.||Repeat for reps." 4265 + }, 4266 + "media": [ 4267 + { 4268 + "url": "https://files.strong.app/users/global/IMGWS0rXOt58p.jpg", 4269 + "type": "IMAGE", 4270 + "contentType": "image/jpeg" 4271 + }, 4272 + { 4273 + "url": "https://files.strong.app/users/global/THUWS0rXOt58p%403x.png", 4274 + "type": "THUMBNAIL", 4275 + "contentType": "image/png" 4276 + } 4277 + ], 4278 + "cellTypeConfigs": [ 4279 + { 4280 + "cellType": "BARBELL_WEIGHT", 4281 + "mandatory": true 4282 + }, 4283 + { 4284 + "cellType": "REPS", 4285 + "mandatory": true 4286 + }, 4287 + { 4288 + "cellType": "RPE", 4289 + "isExponent": true 4290 + } 4291 + ], 4292 + "isGlobal": true, 4293 + "measurementType": "EXERCISE" 4294 + }, 4295 + { 4296 + "_links": { 4297 + "self": { 4298 + "href": "/api/measurements/d53099b7-31f3-41fa-99e2-72fdf47c4503" 4299 + }, 4300 + "tag": [ 4301 + { 4302 + "href": "/api/tags/legs" 4303 + } 4304 + ] 4305 + }, 4306 + "id": "d53099b7-31f3-41fa-99e2-72fdf47c4503", 4307 + "created": "2018-01-22T05:39:10.924Z", 4308 + "lastChanged": "2018-09-27T07:24:23.094Z", 4309 + "name": { 4310 + "en": "Seated Leg Press (Machine)" 4311 + }, 4312 + "instructions": { 4313 + "en": "Adjust the machine and sit with feet positioned at shoulder width on the platform.||Bracing the core and gripping the handles push through the midfoot and extend the legs.||Hold the position at the top without locking the legs and return to the starting position.||Repeat for reps." 4314 + }, 4315 + "media": [ 4316 + { 4317 + "url": "https://files.strong.app/users/global/IMG9qJYWokfTb.jpg", 4318 + "type": "IMAGE", 4319 + "contentType": "image/jpeg" 4320 + }, 4321 + { 4322 + "url": "https://files.strong.app/users/global/VID9qJYWokfTb.mp4", 4323 + "type": "VIDEO", 4324 + "contentType": "video/mp4" 4325 + }, 4326 + { 4327 + "url": "https://files.strong.app/users/global/THU9qJYWokfTb%403x.png", 4328 + "type": "THUMBNAIL", 4329 + "contentType": "image/png" 4330 + } 4331 + ], 4332 + "cellTypeConfigs": [ 4333 + { 4334 + "cellType": "OTHER_WEIGHT", 4335 + "mandatory": true 4336 + }, 4337 + { 4338 + "cellType": "REPS", 4339 + "mandatory": true 4340 + }, 4341 + { 4342 + "cellType": "RPE", 4343 + "isExponent": true 4344 + } 4345 + ], 4346 + "isGlobal": true, 4347 + "measurementType": "EXERCISE" 4348 + }, 4349 + { 4350 + "_links": { 4351 + "self": { 4352 + "href": "/api/measurements/c9ef4e7a-2bec-41b1-8e62-b68dc6d81fb2" 4353 + }, 4354 + "tag": [ 4355 + { 4356 + "href": "/api/tags/legs" 4357 + } 4358 + ] 4359 + }, 4360 + "id": "c9ef4e7a-2bec-41b1-8e62-b68dc6d81fb2", 4361 + "created": "2018-01-22T05:38:51.363Z", 4362 + "lastChanged": "2018-09-20T08:20:11.16Z", 4363 + "name": { 4364 + "en": "Seated Leg Curl (Machine)" 4365 + }, 4366 + "instructions": { 4367 + "en": "Sit with back on padded support of machine and place lower leg on the lever.||Pull lever back by contracting the hamstrings.||Hold at the contracted position and slowly return to the starting position.||Repeat for reps." 4368 + }, 4369 + "media": [ 4370 + { 4371 + "url": "https://files.strong.app/users/global/IMG6fU6TC4mgC.jpg", 4372 + "type": "IMAGE", 4373 + "contentType": "image/jpeg" 4374 + }, 4375 + { 4376 + "url": "https://files.strong.app/users/global/THU6fU6TC4mgC%403x.png", 4377 + "type": "THUMBNAIL", 4378 + "contentType": "image/png" 4379 + } 4380 + ], 4381 + "cellTypeConfigs": [ 4382 + { 4383 + "cellType": "OTHER_WEIGHT", 4384 + "mandatory": true 4385 + }, 4386 + { 4387 + "cellType": "REPS", 4388 + "mandatory": true 4389 + }, 4390 + { 4391 + "cellType": "RPE", 4392 + "isExponent": true 4393 + } 4394 + ], 4395 + "isGlobal": true, 4396 + "measurementType": "EXERCISE" 4397 + }, 4398 + { 4399 + "_links": { 4400 + "self": { 4401 + "href": "/api/measurements/4b8c9374-ab32-4912-906a-202ef1b20ea6" 4402 + }, 4403 + "tag": [ 4404 + { 4405 + "href": "/api/tags/legs" 4406 + } 4407 + ] 4408 + }, 4409 + "id": "4b8c9374-ab32-4912-906a-202ef1b20ea6", 4410 + "created": "2018-01-22T05:38:47.415Z", 4411 + "lastChanged": "2018-09-27T07:24:20.853Z", 4412 + "name": { 4413 + "en": "Seated Calf Raise (Plate Loaded)" 4414 + }, 4415 + "instructions": { 4416 + "en": "Sit on seat facing lever. Place forefeet on platform with heels extending off.||Position lower thighs under lever pads. Grasp handles if available or place hands on lever pad.||Lift levers by pushing heels up.||Repeat for reps." 4417 + }, 4418 + "media": [ 4419 + { 4420 + "url": "https://files.strong.app/users/global/IMG4sfUiNyZEv.jpg", 4421 + "type": "IMAGE", 4422 + "contentType": "image/jpeg" 4423 + }, 4424 + { 4425 + "url": "https://files.strong.app/users/global/THU4sfUiNyZEv%403x.png", 4426 + "type": "THUMBNAIL", 4427 + "contentType": "image/png" 4428 + } 4429 + ], 4430 + "cellTypeConfigs": [ 4431 + { 4432 + "cellType": "OTHER_WEIGHT", 4433 + "mandatory": true 4434 + }, 4435 + { 4436 + "cellType": "REPS", 4437 + "mandatory": true 4438 + }, 4439 + { 4440 + "cellType": "RPE", 4441 + "isExponent": true 4442 + } 4443 + ], 4444 + "isGlobal": true, 4445 + "measurementType": "EXERCISE" 4446 + }, 4447 + { 4448 + "_links": { 4449 + "self": { 4450 + "href": "/api/measurements/3d2c4225-a113-4501-bf6b-abe7503dee9e" 4451 + }, 4452 + "tag": [ 4453 + { 4454 + "href": "/api/tags/core" 4455 + } 4456 + ] 4457 + }, 4458 + "id": "3d2c4225-a113-4501-bf6b-abe7503dee9e", 4459 + "created": "2018-01-22T05:38:43.747Z", 4460 + "lastChanged": "2018-09-20T08:20:43.472Z", 4461 + "name": { 4462 + "en": "Reverse Plank" 4463 + }, 4464 + "instructions": { 4465 + "en": "Place hands shoulder width apart on the floor with chest facing upward.||Bracing core and flexing the quads, hold the position for time." 4466 + }, 4467 + "media": [ 4468 + { 4469 + "url": "https://files.strong.app/users/global/IMGwIjliYLu8v.jpg", 4470 + "type": "IMAGE", 4471 + "contentType": "image/jpeg" 4472 + }, 4473 + { 4474 + "url": "https://files.strong.app/users/global/VIDwIjliYLu8v.mp4", 4475 + "type": "VIDEO", 4476 + "contentType": "video/mp4" 4477 + }, 4478 + { 4479 + "url": "https://files.strong.app/users/global/THUwIjliYLu8v%403x.png", 4480 + "type": "THUMBNAIL", 4481 + "contentType": "image/png" 4482 + } 4483 + ], 4484 + "cellTypeConfigs": [ 4485 + { 4486 + "cellType": "DURATION", 4487 + "mandatory": true 4488 + } 4489 + ], 4490 + "isGlobal": true, 4491 + "measurementType": "EXERCISE" 4492 + }, 4493 + { 4494 + "_links": { 4495 + "self": { 4496 + "href": "/api/measurements/a953b453-9eb2-4c4e-bc55-9962770702f1" 4497 + }, 4498 + "tag": [ 4499 + { 4500 + "href": "/api/tags/arms" 4501 + } 4502 + ] 4503 + }, 4504 + "id": "a953b453-9eb2-4c4e-bc55-9962770702f1", 4505 + "created": "2018-01-22T05:38:40.331Z", 4506 + "lastChanged": "2018-09-27T07:23:20.297Z", 4507 + "name": { 4508 + "en": "Reverse Grip Concentration Curl (Dumbbell)" 4509 + }, 4510 + "instructions": { 4511 + "en": "Hold dumbbell with a pronated grip, resting the upper arm against the inner thigh.||From a fully extended position, curl the barbell upward until the bicep is fully contracted.||Hold and return to the starting position.||Repeat for reps." 4512 + }, 4513 + "media": [ 4514 + { 4515 + "url": "https://files.strong.app/users/global/IMGhtkPGXR1aA.jpg", 4516 + "type": "IMAGE", 4517 + "contentType": "image/jpeg" 4518 + }, 4519 + { 4520 + "url": "https://files.strong.app/users/global/THUhtkPGXR1aA%403x.png", 4521 + "type": "THUMBNAIL", 4522 + "contentType": "image/png" 4523 + } 4524 + ], 4525 + "cellTypeConfigs": [ 4526 + { 4527 + "cellType": "DUMBBELL_WEIGHT", 4528 + "mandatory": true 4529 + }, 4530 + { 4531 + "cellType": "REPS", 4532 + "mandatory": true 4533 + }, 4534 + { 4535 + "cellType": "RPE", 4536 + "isExponent": true 4537 + } 4538 + ], 4539 + "isGlobal": true, 4540 + "measurementType": "EXERCISE" 4541 + }, 4542 + { 4543 + "_links": { 4544 + "self": { 4545 + "href": "/api/measurements/e51ee0d8-bfa7-4bcf-b11d-86997a38c298" 4546 + }, 4547 + "tag": [ 4548 + { 4549 + "href": "/api/tags/arms" 4550 + } 4551 + ] 4552 + }, 4553 + "id": "e51ee0d8-bfa7-4bcf-b11d-86997a38c298", 4554 + "created": "2018-01-22T05:38:36.52Z", 4555 + "lastChanged": "2018-09-20T08:19:56.231Z", 4556 + "name": { 4557 + "en": "Reverse Curl (Dumbbell)" 4558 + }, 4559 + "instructions": { 4560 + "en": "Stand straight and hold the dumbbells with an overhand grip. Keep your arms hanging straight down at around shoulder width.||Keeping your elbows near your torso, raise the dumbbells until your forearms are vertical.||Lower arms until fully extended.||Repeat for reps." 4561 + }, 4562 + "media": [ 4563 + { 4564 + "url": "https://files.strong.app/users/global/IMGw90osQ9xKb.jpg", 4565 + "type": "IMAGE", 4566 + "contentType": "image/jpeg" 4567 + }, 4568 + { 4569 + "url": "https://files.strong.app/users/global/THUw90osQ9xKb%403x.png", 4570 + "type": "THUMBNAIL", 4571 + "contentType": "image/png" 4572 + } 4573 + ], 4574 + "cellTypeConfigs": [ 4575 + { 4576 + "cellType": "DUMBBELL_WEIGHT", 4577 + "mandatory": true 4578 + }, 4579 + { 4580 + "cellType": "REPS", 4581 + "mandatory": true 4582 + }, 4583 + { 4584 + "cellType": "RPE", 4585 + "isExponent": true 4586 + } 4587 + ], 4588 + "isGlobal": true, 4589 + "measurementType": "EXERCISE" 4590 + }, 4591 + { 4592 + "_links": { 4593 + "self": { 4594 + "href": "/api/measurements/8951200e-5791-4885-bee1-cacac5d08c77" 4595 + }, 4596 + "tag": [ 4597 + { 4598 + "href": "/api/tags/shoulders" 4599 + } 4600 + ] 4601 + }, 4602 + "id": "8951200e-5791-4885-bee1-cacac5d08c77", 4603 + "created": "2018-01-22T05:38:28.933Z", 4604 + "lastChanged": "2018-09-20T08:19:40.434Z", 4605 + "name": { 4606 + "en": "Overhead Press (Smith Machine)" 4607 + }, 4608 + "instructions": { 4609 + "en": "Stand in front of the Smith machine and adjust the bar height so that it's positioned slightly below your shoulders.||Slightly bend your knees and grab the bar with an overhand grip.||Disengage the bar from the hooks by straightening your knees and rotating the bar forward.||Take a deep breath and brace your core.||Press the weight upwards until your arms are extended over your head. Be sure to keep your knees straight.||Lower the bar until it's directly in front of your shoulders and exhale.||Repeat for reps." 4610 + }, 4611 + "media": [ 4612 + { 4613 + "url": "https://files.strong.app/users/global/IMGc134qTzvU7.jpg", 4614 + "type": "IMAGE", 4615 + "contentType": "image/jpeg" 4616 + }, 4617 + { 4618 + "url": "https://files.strong.app/users/global/VIDc134qTzvU7.mp4", 4619 + "type": "VIDEO", 4620 + "contentType": "video/mp4" 4621 + }, 4622 + { 4623 + "url": "https://files.strong.app/users/global/THUc134qTzvU7%403x.png", 4624 + "type": "THUMBNAIL", 4625 + "contentType": "image/png" 4626 + } 4627 + ], 4628 + "cellTypeConfigs": [ 4629 + { 4630 + "cellType": "OTHER_WEIGHT", 4631 + "mandatory": true 4632 + }, 4633 + { 4634 + "cellType": "REPS", 4635 + "mandatory": true 4636 + }, 4637 + { 4638 + "cellType": "RPE", 4639 + "isExponent": true 4640 + } 4641 + ], 4642 + "isGlobal": true, 4643 + "measurementType": "EXERCISE" 4644 + }, 4645 + { 4646 + "_links": { 4647 + "self": { 4648 + "href": "/api/measurements/cffa1438-6d77-4a8d-8493-b8d7529d61ba" 4649 + }, 4650 + "tag": [ 4651 + { 4652 + "href": "/api/tags/back" 4653 + } 4654 + ] 4655 + }, 4656 + "id": "cffa1438-6d77-4a8d-8493-b8d7529d61ba", 4657 + "created": "2018-01-22T05:38:05.648Z", 4658 + "lastChanged": "2018-09-20T08:20:21.885Z", 4659 + "name": { 4660 + "en": "Rack Pull (Barbell)" 4661 + }, 4662 + "instructions": { 4663 + "en": "Inside a power rack, set the safety bar in a low position so that the bar is slightly below your knee when at rest.||Place your feet underneath the bar with the bar positioned over midfoot.||Reach for the bar by bending at the hips and hold it with a double overhand grip or a mixed grip. Feel free to use lifting straps and/or chalk to increase grip strength.||Lift the bar by straightening your hips and your knees at the same time.||Pull shoulders back at the top of the lift.||Return to starting position by reversing the motion.||Repeat for reps." 4664 + }, 4665 + "media": [ 4666 + { 4667 + "url": "https://files.strong.app/users/global/IMGzu7zGQ4UiD.jpg", 4668 + "type": "IMAGE", 4669 + "contentType": "image/jpeg" 4670 + }, 4671 + { 4672 + "url": "https://files.strong.app/users/global/THUzu7zGQ4UiD%403x.png", 4673 + "type": "THUMBNAIL", 4674 + "contentType": "image/png" 4675 + } 4676 + ], 4677 + "cellTypeConfigs": [ 4678 + { 4679 + "cellType": "BARBELL_WEIGHT", 4680 + "mandatory": true 4681 + }, 4682 + { 4683 + "cellType": "REPS", 4684 + "mandatory": true 4685 + }, 4686 + { 4687 + "cellType": "RPE", 4688 + "isExponent": true 4689 + } 4690 + ], 4691 + "isGlobal": true, 4692 + "measurementType": "EXERCISE" 4693 + }, 4694 + { 4695 + "_links": { 4696 + "self": { 4697 + "href": "/api/measurements/e6af1fc0-c961-4e74-a815-61f61e4fe42b" 4698 + }, 4699 + "tag": [ 4700 + { 4701 + "href": "/api/tags/chest" 4702 + } 4703 + ] 4704 + }, 4705 + "id": "e6af1fc0-c961-4e74-a815-61f61e4fe42b", 4706 + "created": "2018-01-22T05:37:57.43Z", 4707 + "lastChanged": "2018-09-27T07:23:13.178Z", 4708 + "name": { 4709 + "en": "Push Up (Band)" 4710 + }, 4711 + "instructions": { 4712 + "en": "Place a band behind the back and under the hands. Ensure there is sufficient tension at the top of the pushup.||Lie prone on floor with hands slightly wider than shoulder width.||Raise body up off floor by extending arms with body straight.||Keeping body straight, lower body to floor by bending arms. Push body up until arms are extended.||Repeat for reps." 4713 + }, 4714 + "media": [ 4715 + { 4716 + "url": "https://files.strong.app/users/global/IMGwaVQUDSBF0.jpg", 4717 + "type": "IMAGE", 4718 + "contentType": "image/jpeg" 4719 + }, 4720 + { 4721 + "url": "https://files.strong.app/users/global/THUwaVQUDSBF0%403x.png", 4722 + "type": "THUMBNAIL", 4723 + "contentType": "image/png" 4724 + } 4725 + ], 4726 + "cellTypeConfigs": [ 4727 + { 4728 + "cellType": "WEIGHTED_BODYWEIGHT" 4729 + }, 4730 + { 4731 + "cellType": "REPS", 4732 + "mandatory": true 4733 + }, 4734 + { 4735 + "cellType": "RPE", 4736 + "isExponent": true 4737 + } 4738 + ], 4739 + "isGlobal": true, 4740 + "measurementType": "EXERCISE" 4741 + }, 4742 + { 4743 + "_links": { 4744 + "self": { 4745 + "href": "/api/measurements/1a9537c6-f56a-4d4e-a491-c5c172cfa5ed" 4746 + }, 4747 + "tag": [ 4748 + { 4749 + "href": "/api/tags/chest" 4750 + } 4751 + ] 4752 + }, 4753 + "id": "1a9537c6-f56a-4d4e-a491-c5c172cfa5ed", 4754 + "created": "2018-01-22T05:37:53.811Z", 4755 + "lastChanged": "2018-09-20T08:27:09.667Z", 4756 + "name": { 4757 + "en": "Pullover (Dumbbell)" 4758 + }, 4759 + "instructions": { 4760 + "en": "Placing the upper back against the bench with a dumbbell placed on the chest.||Grasp the dumbbell with both hands pressing against one end and hold straight over the chest.||Lower the dumbbell in an arc above the head until you feel a stretch in the chest muscles.||Return to starting position while breathing out.||Repeat for reps." 4761 + }, 4762 + "media": [ 4763 + { 4764 + "url": "https://files.strong.app/users/global/IMGCnG27VmK9U.jpg", 4765 + "type": "IMAGE", 4766 + "contentType": "image/jpeg" 4767 + }, 4768 + { 4769 + "url": "https://files.strong.app/users/global/VIDCnG27VmK9U.mp4", 4770 + "type": "VIDEO", 4771 + "contentType": "video/mp4" 4772 + }, 4773 + { 4774 + "url": "https://files.strong.app/users/global/THUCnG27VmK9U%403x.png", 4775 + "type": "THUMBNAIL", 4776 + "contentType": "image/png" 4777 + } 4778 + ], 4779 + "cellTypeConfigs": [ 4780 + { 4781 + "cellType": "DUMBBELL_WEIGHT", 4782 + "mandatory": true 4783 + }, 4784 + { 4785 + "cellType": "REPS", 4786 + "mandatory": true 4787 + }, 4788 + { 4789 + "cellType": "RPE", 4790 + "isExponent": true 4791 + } 4792 + ], 4793 + "isGlobal": true, 4794 + "measurementType": "EXERCISE" 4795 + }, 4796 + { 4797 + "_links": { 4798 + "self": { 4799 + "href": "/api/measurements/091ba495-1623-4578-95f0-5bd1aeebf3e9" 4800 + }, 4801 + "tag": [ 4802 + { 4803 + "href": "/api/tags/shoulders" 4804 + } 4805 + ] 4806 + }, 4807 + "id": "091ba495-1623-4578-95f0-5bd1aeebf3e9", 4808 + "created": "2018-01-22T05:37:41.62Z", 4809 + "lastChanged": "2018-09-27T07:22:30.879Z", 4810 + "name": { 4811 + "en": "Lateral Raise (Cable)" 4812 + }, 4813 + "instructions": { 4814 + "en": "Lower cable pulleys to the lowest position.||Start with the handle resting on the side of the thigh. The arm should be slightly bent.||Using your shoulder, lift the arm in a semi-circular motion until slightly above parallel.||Return to the starting position slowly while maintaining a tight core.||Repeat for reps." 4815 + }, 4816 + "media": [ 4817 + { 4818 + "url": "https://files.strong.app/users/global/IMGjKzMeLT1MI.jpg", 4819 + "type": "IMAGE", 4820 + "contentType": "image/jpeg" 4821 + }, 4822 + { 4823 + "url": "https://files.strong.app/users/global/VIDjKzMeLT1MI.mp4", 4824 + "type": "VIDEO", 4825 + "contentType": "video/mp4" 4826 + }, 4827 + { 4828 + "url": "https://files.strong.app/users/global/THUjKzMeLT1MI%403x.png", 4829 + "type": "THUMBNAIL", 4830 + "contentType": "image/png" 4831 + } 4832 + ], 4833 + "cellTypeConfigs": [ 4834 + { 4835 + "cellType": "OTHER_WEIGHT", 4836 + "mandatory": true 4837 + }, 4838 + { 4839 + "cellType": "REPS", 4840 + "mandatory": true 4841 + }, 4842 + { 4843 + "cellType": "RPE", 4844 + "isExponent": true 4845 + } 4846 + ], 4847 + "isGlobal": true, 4848 + "measurementType": "EXERCISE" 4849 + }, 4850 + { 4851 + "_links": { 4852 + "self": { 4853 + "href": "/api/measurements/3a438aef-3262-4b10-af0b-07a17c6694a7" 4854 + }, 4855 + "tag": [ 4856 + { 4857 + "href": "/api/tags/shoulders" 4858 + } 4859 + ] 4860 + }, 4861 + "id": "3a438aef-3262-4b10-af0b-07a17c6694a7", 4862 + "created": "2018-01-22T05:37:35.963Z", 4863 + "lastChanged": "2018-09-27T07:22:21.7Z", 4864 + "name": { 4865 + "en": "Lateral Raise (Band)" 4866 + }, 4867 + "instructions": { 4868 + "en": "Secure the band under the middle foot.||Start with the handle resting on the side of the thigh. The arm should be slightly bent.||Using your shoulder, lift the arm in a semi-circular motion until slightly above parallel.||Return to the starting position slowly while maintaining a tight core.||Repeat for reps." 4869 + }, 4870 + "media": [ 4871 + { 4872 + "url": "https://files.strong.app/users/global/IMGnhheHcrAKB.jpg", 4873 + "type": "IMAGE", 4874 + "contentType": "image/jpeg" 4875 + }, 4876 + { 4877 + "url": "https://files.strong.app/users/global/THUnhheHcrAKB%403x.png", 4878 + "type": "THUMBNAIL", 4879 + "contentType": "image/png" 4880 + } 4881 + ], 4882 + "cellTypeConfigs": [ 4883 + { 4884 + "cellType": "WEIGHTED_BODYWEIGHT" 4885 + }, 4886 + { 4887 + "cellType": "REPS", 4888 + "mandatory": true 4889 + }, 4890 + { 4891 + "cellType": "RPE", 4892 + "isExponent": true 4893 + } 4894 + ], 4895 + "isGlobal": true, 4896 + "measurementType": "EXERCISE" 4897 + }, 4898 + { 4899 + "_links": { 4900 + "self": { 4901 + "href": "/api/measurements/d1f2e4d1-2529-4d33-bfd1-3c22b7d99dbd" 4902 + }, 4903 + "tag": [ 4904 + { 4905 + "href": "/api/tags/legs" 4906 + } 4907 + ] 4908 + }, 4909 + "id": "d1f2e4d1-2529-4d33-bfd1-3c22b7d99dbd", 4910 + "created": "2018-01-22T05:37:30.781Z", 4911 + "lastChanged": "2018-09-27T07:22:11.459Z", 4912 + "name": { 4913 + "en": "Lateral Box Jump" 4914 + }, 4915 + "instructions": { 4916 + "en": "Position a box to the left side of you.||Dipping into a semi squat jump onto the box.||Descend the left side of the box and alternate jumping for reps." 4917 + }, 4918 + "media": [ 4919 + { 4920 + "url": "https://files.strong.app/users/global/IMGPCAixZWgiH.jpg", 4921 + "type": "IMAGE", 4922 + "contentType": "image/jpeg" 4923 + }, 4924 + { 4925 + "url": "https://files.strong.app/users/global/THUPCAixZWgiH%403x.png", 4926 + "type": "THUMBNAIL", 4927 + "contentType": "image/png" 4928 + } 4929 + ], 4930 + "cellTypeConfigs": [ 4931 + { 4932 + "cellType": "REPS", 4933 + "mandatory": true 4934 + }, 4935 + { 4936 + "cellType": "RPE", 4937 + "isExponent": true 4938 + } 4939 + ], 4940 + "isGlobal": true, 4941 + "measurementType": "EXERCISE" 4942 + }, 4943 + { 4944 + "_links": { 4945 + "self": { 4946 + "href": "/api/measurements/eff696f8-07e3-4745-aa31-a0def4c93ed1" 4947 + }, 4948 + "tag": [ 4949 + { 4950 + "href": "/api/tags/back" 4951 + } 4952 + ] 4953 + }, 4954 + "id": "eff696f8-07e3-4745-aa31-a0def4c93ed1", 4955 + "created": "2018-01-22T05:37:25.049Z", 4956 + "lastChanged": "2018-09-27T07:21:32.307Z", 4957 + "name": { 4958 + "en": "Kneeling Pulldown (Band)" 4959 + }, 4960 + "instructions": { 4961 + "en": "Secure the band in an elevated position and hold the handles behind the head.||Holding the handles behind the head pull downward in a crunch motion until the elbows touch the thighs.||Return to the starting position in a controlled motion.||Repeat for reps." 4962 + }, 4963 + "media": [ 4964 + { 4965 + "url": "https://files.strong.app/users/global/IMGXh61bVsMJi.jpg", 4966 + "type": "IMAGE", 4967 + "contentType": "image/jpeg" 4968 + }, 4969 + { 4970 + "url": "https://files.strong.app/users/global/THUXh61bVsMJi%403x.png", 4971 + "type": "THUMBNAIL", 4972 + "contentType": "image/png" 4973 + } 4974 + ], 4975 + "cellTypeConfigs": [ 4976 + { 4977 + "cellType": "WEIGHTED_BODYWEIGHT" 4978 + }, 4979 + { 4980 + "cellType": "REPS", 4981 + "mandatory": true 4982 + }, 4983 + { 4984 + "cellType": "RPE", 4985 + "isExponent": true 4986 + } 4987 + ], 4988 + "isGlobal": true, 4989 + "measurementType": "EXERCISE" 4990 + }, 4991 + { 4992 + "_links": { 4993 + "self": { 4994 + "href": "/api/measurements/e676f31d-5fa2-4a61-bed6-af0ff6c17c77" 4995 + }, 4996 + "tag": [ 4997 + { 4998 + "href": "/api/tags/full-body" 4999 + } 5000 + ] 5001 + }, 5002 + "id": "e676f31d-5fa2-4a61-bed6-af0ff6c17c77", 5003 + "created": "2018-01-22T05:37:15.987Z", 5004 + "lastChanged": "2018-09-27T07:21:13.045Z", 5005 + "name": { 5006 + "en": "Kettlebell Turkish Get Up" 5007 + }, 5008 + "instructions": { 5009 + "en": "Starting with the kettlebell in your hand, with arm perpendicular to the floor. Place the opposite arm at a 45 degree angle on the floor.||Drive from the foot on the kettlebell side, roll up onto your opposite elbow, and exhale. Once you're stable at the elbow, roll up onto your hand.||Lift hips off the ground to move your outstretched leg under your body. Support yourself on one arm, the heel of the straight leg, and the surface of your flat foot.||Enter into a lunge position and extend leg to stand up.||Return to the starting position and repeat for reps." 5010 + }, 5011 + "media": [ 5012 + { 5013 + "url": "https://files.strong.app/users/global/IMGwfCkYtT3FK.jpg", 5014 + "type": "IMAGE", 5015 + "contentType": "image/jpeg" 5016 + }, 5017 + { 5018 + "url": "https://files.strong.app/users/global/THUwfCkYtT3FK%403x.png", 5019 + "type": "THUMBNAIL", 5020 + "contentType": "image/png" 5021 + } 5022 + ], 5023 + "cellTypeConfigs": [ 5024 + { 5025 + "cellType": "OTHER_WEIGHT", 5026 + "mandatory": true 5027 + }, 5028 + { 5029 + "cellType": "REPS", 5030 + "mandatory": true 5031 + }, 5032 + { 5033 + "cellType": "RPE", 5034 + "isExponent": true 5035 + } 5036 + ], 5037 + "isGlobal": true, 5038 + "measurementType": "EXERCISE" 5039 + }, 5040 + { 5041 + "_links": { 5042 + "self": { 5043 + "href": "/api/measurements/55afec19-d074-4083-a554-085f533b62ce" 5044 + }, 5045 + "tag": [ 5046 + { 5047 + "href": "/api/tags/full-body" 5048 + } 5049 + ] 5050 + }, 5051 + "id": "55afec19-d074-4083-a554-085f533b62ce", 5052 + "created": "2018-01-22T05:36:59.425Z", 5053 + "lastChanged": "2018-09-27T07:37:05.075Z", 5054 + "name": { 5055 + "en": "Thruster (Kettlebell)" 5056 + }, 5057 + "instructions": { 5058 + "en": "Start with two kettlebells in a clean position (one in each hand, in the rack position). The kettlebells will rest along on your outside forearm.||Begin to break the hips to descend into a squat. Ensure the core is braced and lower until thighs are slightly beyond parallel.||At the bottom, push through the heel and midfoot and simultaneously press kettlebells overhead by extending the arms, using the momentum of the squat to drive the weights.||Return to the starting position by lowering the kettlebells into clean position and repeat for reps." 5059 + }, 5060 + "media": [ 5061 + { 5062 + "url": "https://files.strong.app/users/global/IMGrzZXMmjXrg.jpg", 5063 + "type": "IMAGE", 5064 + "contentType": "image/jpeg" 5065 + }, 5066 + { 5067 + "url": "https://files.strong.app/users/global/THUrzZXMmjXrg%403x.png", 5068 + "type": "THUMBNAIL", 5069 + "contentType": "image/png" 5070 + } 5071 + ], 5072 + "cellTypeConfigs": [ 5073 + { 5074 + "cellType": "OTHER_WEIGHT", 5075 + "mandatory": true 5076 + }, 5077 + { 5078 + "cellType": "REPS", 5079 + "mandatory": true 5080 + }, 5081 + { 5082 + "cellType": "RPE", 5083 + "isExponent": true 5084 + } 5085 + ], 5086 + "isGlobal": true, 5087 + "measurementType": "EXERCISE" 5088 + }, 5089 + { 5090 + "_links": { 5091 + "self": { 5092 + "href": "/api/measurements/74a43a3f-5e0b-43c8-953e-f7e9c7d72986" 5093 + }, 5094 + "tag": [ 5095 + { 5096 + "href": "/api/tags/full-body" 5097 + } 5098 + ] 5099 + }, 5100 + "id": "74a43a3f-5e0b-43c8-953e-f7e9c7d72986", 5101 + "created": "2018-01-22T05:35:45.03Z", 5102 + "lastChanged": "2018-09-20T08:16:16.602Z", 5103 + "name": { 5104 + "en": "Kettlebell Swing" 5105 + }, 5106 + "instructions": { 5107 + "en": "Set feet shoulder width apart, knees slightly bent and a kettlebell gripped with a pronated grip between the legs.||Keeping the core braced and back slightly arched, bend the hips back until the kettlebell is behind the legs and squeeze glutes and extend hips to swing the kettlebell upward.||Let the weight swing upward to slightly above shoulder level while keeping arms straight and let the kettlebell swing back to the starting position in a fluid motion.||Repeat for reps." 5108 + }, 5109 + "media": [ 5110 + { 5111 + "url": "https://files.strong.app/users/global/IMGeCtchyihUy.jpg", 5112 + "type": "IMAGE", 5113 + "contentType": "image/jpeg" 5114 + }, 5115 + { 5116 + "url": "https://files.strong.app/users/global/THUeCtchyihUy%403x.png", 5117 + "type": "THUMBNAIL", 5118 + "contentType": "image/png" 5119 + } 5120 + ], 5121 + "cellTypeConfigs": [ 5122 + { 5123 + "cellType": "OTHER_WEIGHT", 5124 + "mandatory": true 5125 + }, 5126 + { 5127 + "cellType": "REPS", 5128 + "mandatory": true 5129 + }, 5130 + { 5131 + "cellType": "RPE", 5132 + "isExponent": true 5133 + } 5134 + ], 5135 + "isGlobal": true, 5136 + "measurementType": "EXERCISE" 5137 + }, 5138 + { 5139 + "_links": { 5140 + "self": { 5141 + "href": "/api/measurements/980cb0df-4ef3-4af7-9333-48ee9f3943ce" 5142 + }, 5143 + "tag": [ 5144 + { 5145 + "href": "/api/tags/chest" 5146 + } 5147 + ] 5148 + }, 5149 + "id": "980cb0df-4ef3-4af7-9333-48ee9f3943ce", 5150 + "created": "2018-01-22T05:34:28.734Z", 5151 + "lastChanged": "2018-09-20T08:16:04.559Z", 5152 + "name": { 5153 + "en": "Incline Bench Press (Smith Machine)" 5154 + }, 5155 + "instructions": { 5156 + "en": "Place incline bench below smith bar and hold bar with a pronated grip at shoulder width.||Unlock bar from smith rail and hold bar above the chest with arms straight.||Retract scapula and have elbows between 45 to 90 degree angle. An advanced tip is to tuck the shoulders down into the sockets and driven back.||Breathe in and lower bar to the middle chest.||After pausing at the bottom, push the bar towards the starting position squeezing the chest.||Repeat for reps." 5157 + }, 5158 + "media": [ 5159 + { 5160 + "url": "https://files.strong.app/users/global/IMGegksi44eRc.jpg", 5161 + "type": "IMAGE", 5162 + "contentType": "image/jpeg" 5163 + }, 5164 + { 5165 + "url": "https://files.strong.app/users/global/VIDegksi44eRc.mp4", 5166 + "type": "VIDEO", 5167 + "contentType": "video/mp4" 5168 + }, 5169 + { 5170 + "url": "https://files.strong.app/users/global/THUegksi44eRc%403x.png", 5171 + "type": "THUMBNAIL", 5172 + "contentType": "image/png" 5173 + } 5174 + ], 5175 + "cellTypeConfigs": [ 5176 + { 5177 + "cellType": "OTHER_WEIGHT", 5178 + "mandatory": true 5179 + }, 5180 + { 5181 + "cellType": "REPS", 5182 + "mandatory": true 5183 + }, 5184 + { 5185 + "cellType": "RPE", 5186 + "isExponent": true 5187 + } 5188 + ], 5189 + "isGlobal": true, 5190 + "measurementType": "EXERCISE" 5191 + }, 5192 + { 5193 + "_links": { 5194 + "self": { 5195 + "href": "/api/measurements/6416d266-c84c-4aa6-a8b0-7582619c1bcb" 5196 + }, 5197 + "tag": [ 5198 + { 5199 + "href": "/api/tags/chest" 5200 + } 5201 + ] 5202 + }, 5203 + "id": "6416d266-c84c-4aa6-a8b0-7582619c1bcb", 5204 + "created": "2018-01-22T05:34:22.369Z", 5205 + "lastChanged": "2018-09-20T08:15:34.595Z", 5206 + "name": { 5207 + "en": "Incline Bench Press (Dumbbell)" 5208 + }, 5209 + "instructions": { 5210 + "en": "Lie on the incline bench holding the dumbbells with a shoulder width pronated grip.||Retract scapula and have elbows between 45 to 90 degree angle. An advanced tip is to tuck the shoulders down into the sockets and driven back.||Breathe in and lower dumbbells to the middle chest.||After pausing at the bottom, push dumbbells towards the starting position squeezing the chest.||Repeat for reps." 5211 + }, 5212 + "media": [ 5213 + { 5214 + "url": "https://files.strong.app/users/global/IMGdbBnnlRGpj.jpg", 5215 + "type": "IMAGE", 5216 + "contentType": "image/jpeg" 5217 + }, 5218 + { 5219 + "url": "https://files.strong.app/users/global/VIDdbBnnlRGpj.mp4", 5220 + "type": "VIDEO", 5221 + "contentType": "video/mp4" 5222 + }, 5223 + { 5224 + "url": "https://files.strong.app/users/global/THUdbBnnlRGpj%403x.png", 5225 + "type": "THUMBNAIL", 5226 + "contentType": "image/png" 5227 + } 5228 + ], 5229 + "cellTypeConfigs": [ 5230 + { 5231 + "cellType": "DUMBBELL_WEIGHT", 5232 + "mandatory": true 5233 + }, 5234 + { 5235 + "cellType": "REPS", 5236 + "mandatory": true 5237 + }, 5238 + { 5239 + "cellType": "RPE", 5240 + "isExponent": true 5241 + } 5242 + ], 5243 + "isGlobal": true, 5244 + "measurementType": "EXERCISE" 5245 + }, 5246 + { 5247 + "_links": { 5248 + "self": { 5249 + "href": "/api/measurements/7f6f4c96-4893-4f40-a7f4-2baf53cb3d04" 5250 + }, 5251 + "tag": [ 5252 + { 5253 + "href": "/api/tags/chest" 5254 + } 5255 + ] 5256 + }, 5257 + "id": "7f6f4c96-4893-4f40-a7f4-2baf53cb3d04", 5258 + "created": "2018-01-22T05:34:15.701Z", 5259 + "lastChanged": "2018-09-27T07:20:03.41Z", 5260 + "name": { 5261 + "en": "Incline Bench Press (Cable)" 5262 + }, 5263 + "instructions": { 5264 + "en": "Lie on the incline bench holding the cable handles with a shoulder width pronated grip.||Retract scapula and have elbows between 45 to 90 degree angle. An advanced tip is to tuck the shoulders down into the sockets and driven back.||Breathe in and lower handles to the middle chest.||After pausing at the bottom, push handles towards the starting position squeezing the chest.||Repeat for reps." 5265 + }, 5266 + "media": [ 5267 + { 5268 + "url": "https://files.strong.app/users/global/IMG4RNzidD7Vp.jpg", 5269 + "type": "IMAGE", 5270 + "contentType": "image/jpeg" 5271 + }, 5272 + { 5273 + "url": "https://files.strong.app/users/global/THU4RNzidD7Vp%403x.png", 5274 + "type": "THUMBNAIL", 5275 + "contentType": "image/png" 5276 + } 5277 + ], 5278 + "cellTypeConfigs": [ 5279 + { 5280 + "cellType": "OTHER_WEIGHT", 5281 + "mandatory": true 5282 + }, 5283 + { 5284 + "cellType": "REPS", 5285 + "mandatory": true 5286 + }, 5287 + { 5288 + "cellType": "RPE", 5289 + "isExponent": true 5290 + } 5291 + ], 5292 + "isGlobal": true, 5293 + "measurementType": "EXERCISE" 5294 + }, 5295 + { 5296 + "_links": { 5297 + "self": { 5298 + "href": "/api/measurements/3395ead5-bd9b-4d02-be71-dc2b1ee5f16d" 5299 + }, 5300 + "tag": [ 5301 + { 5302 + "href": "/api/tags/legs" 5303 + } 5304 + ] 5305 + }, 5306 + "id": "3395ead5-bd9b-4d02-be71-dc2b1ee5f16d", 5307 + "created": "2018-01-22T05:34:08.015Z", 5308 + "lastChanged": "2018-09-27T07:19:49.84Z", 5309 + "name": { 5310 + "en": "Handstand Push Up" 5311 + }, 5312 + "instructions": { 5313 + "en": "Starting by facing a wall and, with arms extended, flip into a handstand position against the wall.||Keeping the body as straight as possible slowly lower yourself until your head almost touches the floor.||Push back to the starting position while exhaling until elbows are near full extension.||Repeat for reps." 5314 + }, 5315 + "media": [ 5316 + { 5317 + "url": "https://files.strong.app/users/global/IMGUebDYdOTFr.jpg", 5318 + "type": "IMAGE", 5319 + "contentType": "image/jpeg" 5320 + }, 5321 + { 5322 + "url": "https://files.strong.app/users/global/THUUebDYdOTFr%403x.png", 5323 + "type": "THUMBNAIL", 5324 + "contentType": "image/png" 5325 + } 5326 + ], 5327 + "cellTypeConfigs": [ 5328 + { 5329 + "cellType": "WEIGHTED_BODYWEIGHT" 5330 + }, 5331 + { 5332 + "cellType": "REPS", 5333 + "mandatory": true 5334 + }, 5335 + { 5336 + "cellType": "RPE", 5337 + "isExponent": true 5338 + } 5339 + ], 5340 + "isGlobal": true, 5341 + "measurementType": "EXERCISE" 5342 + }, 5343 + { 5344 + "_links": { 5345 + "self": { 5346 + "href": "/api/measurements/4a304d9a-9a7a-440f-bb9a-9fd5cde6b590" 5347 + }, 5348 + "tag": [ 5349 + { 5350 + "href": "/api/tags/arms" 5351 + } 5352 + ] 5353 + }, 5354 + "id": "4a304d9a-9a7a-440f-bb9a-9fd5cde6b590", 5355 + "created": "2018-01-22T05:34:01.598Z", 5356 + "lastChanged": "2018-09-27T07:19:48.381Z", 5357 + "name": { 5358 + "en": "Hammer Curl (Cable)" 5359 + }, 5360 + "instructions": { 5361 + "en": "Stand facing machine with elbows touching the side of the torso. Grasp the handles with a palm in grip.||Using biceps, pull forearms and hands upward until fully contracted.||Squeeze biceps and slowly lower back to the starting position.||Repeat for reps." 5362 + }, 5363 + "media": [ 5364 + { 5365 + "url": "https://files.strong.app/users/global/IMG93H8TNQg4C.jpg", 5366 + "type": "IMAGE", 5367 + "contentType": "image/jpeg" 5368 + }, 5369 + { 5370 + "url": "https://files.strong.app/users/global/THU93H8TNQg4C%403x.png", 5371 + "type": "THUMBNAIL", 5372 + "contentType": "image/png" 5373 + } 5374 + ], 5375 + "cellTypeConfigs": [ 5376 + { 5377 + "cellType": "OTHER_WEIGHT", 5378 + "mandatory": true 5379 + }, 5380 + { 5381 + "cellType": "REPS", 5382 + "mandatory": true 5383 + }, 5384 + { 5385 + "cellType": "RPE", 5386 + "isExponent": true 5387 + } 5388 + ], 5389 + "isGlobal": true, 5390 + "measurementType": "EXERCISE" 5391 + }, 5392 + { 5393 + "_links": { 5394 + "self": { 5395 + "href": "/api/measurements/16828b87-c3bb-4641-ab68-c0c0d38d6bea" 5396 + }, 5397 + "tag": [ 5398 + { 5399 + "href": "/api/tags/arms" 5400 + } 5401 + ] 5402 + }, 5403 + "id": "16828b87-c3bb-4641-ab68-c0c0d38d6bea", 5404 + "created": "2018-01-22T05:33:56.002Z", 5405 + "lastChanged": "2018-09-27T07:19:46.946Z", 5406 + "name": { 5407 + "en": "Hammer Curl (Band)" 5408 + }, 5409 + "instructions": { 5410 + "en": "Stand with bands under the midfoot and with elbows touching the side of the torso. Grasp the handles with a palm in grip.||Using biceps, pull forearms and hands upward until fully contracted.||Squeeze biceps and slowly lower back to the starting position.||Repeat for reps." 5411 + }, 5412 + "media": [ 5413 + { 5414 + "url": "https://files.strong.app/users/global/IMGXRwZMUGPyk.jpg", 5415 + "type": "IMAGE", 5416 + "contentType": "image/jpeg" 5417 + }, 5418 + { 5419 + "url": "https://files.strong.app/users/global/THUXRwZMUGPyk%403x.png", 5420 + "type": "THUMBNAIL", 5421 + "contentType": "image/png" 5422 + } 5423 + ], 5424 + "cellTypeConfigs": [ 5425 + { 5426 + "cellType": "WEIGHTED_BODYWEIGHT" 5427 + }, 5428 + { 5429 + "cellType": "REPS", 5430 + "mandatory": true 5431 + }, 5432 + { 5433 + "cellType": "RPE", 5434 + "isExponent": true 5435 + } 5436 + ], 5437 + "isGlobal": true, 5438 + "measurementType": "EXERCISE" 5439 + }, 5440 + { 5441 + "_links": { 5442 + "self": { 5443 + "href": "/api/measurements/fe4e5949-5f51-4c60-a31f-b45bd9ad8023" 5444 + }, 5445 + "tag": [ 5446 + { 5447 + "href": "/api/tags/legs" 5448 + } 5449 + ] 5450 + }, 5451 + "id": "fe4e5949-5f51-4c60-a31f-b45bd9ad8023", 5452 + "created": "2018-01-22T05:33:49.542Z", 5453 + "lastChanged": "2018-09-27T07:18:54.801Z", 5454 + "name": { 5455 + "en": "Goblet Squat (Kettlebell)" 5456 + }, 5457 + "instructions": { 5458 + "en": "Grab kettlebell and hold against chest using both hands. Stand with legs shoulder width apart.||Keeping core braced, chest up and head neutral, break at the hips keeping pressure on the midfoot and descend into a squat. Continue lowering the body until the thighs are at or past parallel with the ground.||Exhaling, drive through the heels and midfoot, pushing knees outward until back to starting position.||Repeat for reps." 5459 + }, 5460 + "media": [ 5461 + { 5462 + "url": "https://files.strong.app/users/global/IMGnljfNLqe2S.jpg", 5463 + "type": "IMAGE", 5464 + "contentType": "image/jpeg" 5465 + }, 5466 + { 5467 + "url": "https://files.strong.app/users/global/THUnljfNLqe2S%403x.png", 5468 + "type": "THUMBNAIL", 5469 + "contentType": "image/png" 5470 + } 5471 + ], 5472 + "cellTypeConfigs": [ 5473 + { 5474 + "cellType": "OTHER_WEIGHT", 5475 + "mandatory": true 5476 + }, 5477 + { 5478 + "cellType": "REPS", 5479 + "mandatory": true 5480 + }, 5481 + { 5482 + "cellType": "RPE", 5483 + "isExponent": true 5484 + } 5485 + ], 5486 + "isGlobal": true, 5487 + "measurementType": "EXERCISE" 5488 + }, 5489 + { 5490 + "_links": { 5491 + "self": { 5492 + "href": "/api/measurements/594e8ce0-a34a-4349-8dc0-7ac45950b8c8" 5493 + }, 5494 + "tag": [ 5495 + { 5496 + "href": "/api/tags/shoulders" 5497 + } 5498 + ] 5499 + }, 5500 + "id": "594e8ce0-a34a-4349-8dc0-7ac45950b8c8", 5501 + "created": "2018-01-22T05:33:39.594Z", 5502 + "lastChanged": "2018-09-20T08:14:54.085Z", 5503 + "name": { 5504 + "en": "Front Raise (Barbell)" 5505 + }, 5506 + "instructions": { 5507 + "en": "Grasp barbell shoulder width in a pronated grip standing with feet shoulder width.||With arm straight, lift the barbell as you exhale.||Hold the upper position and inhale moving back to the starting position.||Maintain a neutral back and brace core for support.||Repeat for reps." 5508 + }, 5509 + "media": [ 5510 + { 5511 + "url": "https://files.strong.app/users/global/IMGCCAPCPYETL.jpg", 5512 + "type": "IMAGE", 5513 + "contentType": "image/jpeg" 5514 + }, 5515 + { 5516 + "url": "https://files.strong.app/users/global/THUCCAPCPYETL%403x.png", 5517 + "type": "THUMBNAIL", 5518 + "contentType": "image/png" 5519 + } 5520 + ], 5521 + "cellTypeConfigs": [ 5522 + { 5523 + "cellType": "BARBELL_WEIGHT", 5524 + "mandatory": true 5525 + }, 5526 + { 5527 + "cellType": "REPS", 5528 + "mandatory": true 5529 + }, 5530 + { 5531 + "cellType": "RPE", 5532 + "isExponent": true 5533 + } 5534 + ], 5535 + "isGlobal": true, 5536 + "measurementType": "EXERCISE" 5537 + }, 5538 + { 5539 + "_links": { 5540 + "self": { 5541 + "href": "/api/measurements/ec4d5ff5-bd4d-4b33-b785-7db1c36054f8" 5542 + }, 5543 + "tag": [ 5544 + { 5545 + "href": "/api/tags/shoulders" 5546 + } 5547 + ] 5548 + }, 5549 + "id": "ec4d5ff5-bd4d-4b33-b785-7db1c36054f8", 5550 + "created": "2018-01-22T05:33:32.652Z", 5551 + "lastChanged": "2018-09-27T07:16:29.626Z", 5552 + "name": { 5553 + "en": "Front Raise (Band)" 5554 + }, 5555 + "instructions": { 5556 + "en": "Grasp exercise band handles in a pronated grip standing with feet shoulder width.||With arm straight, lift the handle as you exhale.||Hold the upper position and inhale moving back to the starting position.||Repeat for reps." 5557 + }, 5558 + "media": [ 5559 + { 5560 + "url": "https://files.strong.app/users/global/IMGFU4D6q3DNW.jpg", 5561 + "type": "IMAGE", 5562 + "contentType": "image/jpeg" 5563 + }, 5564 + { 5565 + "url": "https://files.strong.app/users/global/THUFU4D6q3DNW%403x.png", 5566 + "type": "THUMBNAIL", 5567 + "contentType": "image/png" 5568 + } 5569 + ], 5570 + "cellTypeConfigs": [ 5571 + { 5572 + "cellType": "WEIGHTED_BODYWEIGHT" 5573 + }, 5574 + { 5575 + "cellType": "REPS", 5576 + "mandatory": true 5577 + }, 5578 + { 5579 + "cellType": "RPE", 5580 + "isExponent": true 5581 + } 5582 + ], 5583 + "isGlobal": true, 5584 + "measurementType": "EXERCISE" 5585 + }, 5586 + { 5587 + "_links": { 5588 + "self": { 5589 + "href": "/api/measurements/44fc5df2-520e-45d5-8810-c9e74b174e49" 5590 + }, 5591 + "tag": [ 5592 + { 5593 + "href": "/api/tags/core" 5594 + } 5595 + ] 5596 + }, 5597 + "id": "44fc5df2-520e-45d5-8810-c9e74b174e49", 5598 + "created": "2018-01-22T05:33:25.424Z", 5599 + "lastChanged": "2018-09-27T07:16:22.792Z", 5600 + "name": { 5601 + "en": "Flat Knee Raise" 5602 + }, 5603 + "instructions": { 5604 + "en": "Lie on a mat or a bench with legs extended in front, with your hands under your glutes.||Keep the core tight and bring your knees to your chest.||While keeping your core braced, lower legs back to the surface without allowing your feet to touch the floor. To make the exercise easier, allow your heels to make contact with the ground.||Repeat for reps." 5605 + }, 5606 + "media": [ 5607 + { 5608 + "url": "https://files.strong.app/users/global/IMGUpPqOIfAfr.jpg", 5609 + "type": "IMAGE", 5610 + "contentType": "image/jpeg" 5611 + }, 5612 + { 5613 + "url": "https://files.strong.app/users/global/THUUpPqOIfAfr%403x.png", 5614 + "type": "THUMBNAIL", 5615 + "contentType": "image/png" 5616 + } 5617 + ], 5618 + "cellTypeConfigs": [ 5619 + { 5620 + "cellType": "REPS", 5621 + "mandatory": true 5622 + }, 5623 + { 5624 + "cellType": "RPE", 5625 + "isExponent": true 5626 + } 5627 + ], 5628 + "isGlobal": true, 5629 + "measurementType": "EXERCISE" 5630 + }, 5631 + { 5632 + "_links": { 5633 + "self": { 5634 + "href": "/api/measurements/4a8de470-a971-45db-830e-5f4b28db0894" 5635 + }, 5636 + "tag": [ 5637 + { 5638 + "href": "/api/tags/chest" 5639 + } 5640 + ] 5641 + }, 5642 + "id": "4a8de470-a971-45db-830e-5f4b28db0894", 5643 + "created": "2018-01-22T05:33:20.429Z", 5644 + "lastChanged": "2018-09-27T07:14:59.787Z", 5645 + "name": { 5646 + "en": "Decline Bench Press (Smith Machine)" 5647 + }, 5648 + "instructions": { 5649 + "en": "Lie on a decline bench, securing legs on the end of the bench. Set up the smith bar at a height where arms are near full extension.||Unlock the bar above the chest with arms straight.||Retract scapula and have elbows between 45 to 90 degree angle. An advanced tip is to tuck the shoulders down into the sockets and driven back.||Breathe in and lower bar to the middle chest.||After pausing at the bottom, push the bar towards the starting position squeezing the chest.||Repeat for reps." 5650 + }, 5651 + "media": [ 5652 + { 5653 + "url": "https://files.strong.app/users/global/IMGyw5V7e2goL.jpg", 5654 + "type": "IMAGE", 5655 + "contentType": "image/jpeg" 5656 + }, 5657 + { 5658 + "url": "https://files.strong.app/users/global/VIDyw5V7e2goL.mp4", 5659 + "type": "VIDEO", 5660 + "contentType": "video/mp4" 5661 + }, 5662 + { 5663 + "url": "https://files.strong.app/users/global/THUyw5V7e2goL%403x.png", 5664 + "type": "THUMBNAIL", 5665 + "contentType": "image/png" 5666 + } 5667 + ], 5668 + "cellTypeConfigs": [ 5669 + { 5670 + "cellType": "OTHER_WEIGHT", 5671 + "mandatory": true 5672 + }, 5673 + { 5674 + "cellType": "REPS", 5675 + "mandatory": true 5676 + }, 5677 + { 5678 + "cellType": "RPE", 5679 + "isExponent": true 5680 + } 5681 + ], 5682 + "isGlobal": true, 5683 + "measurementType": "EXERCISE" 5684 + }, 5685 + { 5686 + "_links": { 5687 + "self": { 5688 + "href": "/api/measurements/6f7f2abf-43f9-414c-8fc9-cc02193c9669" 5689 + }, 5690 + "tag": [ 5691 + { 5692 + "href": "/api/tags/chest" 5693 + } 5694 + ] 5695 + }, 5696 + "id": "6f7f2abf-43f9-414c-8fc9-cc02193c9669", 5697 + "created": "2018-01-22T05:33:14.418Z", 5698 + "lastChanged": "2018-09-27T07:15:00.771Z", 5699 + "name": { 5700 + "en": "Decline Bench Press (Dumbbell)" 5701 + }, 5702 + "instructions": { 5703 + "en": "Lie on a decline bench, securing legs on the end of the bench.||Either get dumbbells handed to you or sit with the dumbbells resting on top of your thighs and slowly bring dumbbells to shoulder width.||Retract scapula and have elbows between 45 to 90 degree angle. An advanced tip is to tuck the shoulders down into the sockets and driven back.||Breathe in and push dumbbells outward and extend arms squeezing the chest.||Breath in and lower dumbbells to the starting position.||Repeat for reps." 5704 + }, 5705 + "media": [ 5706 + { 5707 + "url": "https://files.strong.app/users/global/IMGUBYolOfQHf.jpg", 5708 + "type": "IMAGE", 5709 + "contentType": "image/jpeg" 5710 + }, 5711 + { 5712 + "url": "https://files.strong.app/users/global/THUUBYolOfQHf%403x.png", 5713 + "type": "THUMBNAIL", 5714 + "contentType": "image/png" 5715 + } 5716 + ], 5717 + "cellTypeConfigs": [ 5718 + { 5719 + "cellType": "DUMBBELL_WEIGHT", 5720 + "mandatory": true 5721 + }, 5722 + { 5723 + "cellType": "REPS", 5724 + "mandatory": true 5725 + }, 5726 + { 5727 + "cellType": "RPE", 5728 + "isExponent": true 5729 + } 5730 + ], 5731 + "isGlobal": true, 5732 + "measurementType": "EXERCISE" 5733 + }, 5734 + { 5735 + "_links": { 5736 + "self": { 5737 + "href": "/api/measurements/9000fcaf-155a-410e-b774-ee1dce73b62d" 5738 + }, 5739 + "tag": [ 5740 + { 5741 + "href": "/api/tags/legs" 5742 + } 5743 + ] 5744 + }, 5745 + "id": "9000fcaf-155a-410e-b774-ee1dce73b62d", 5746 + "created": "2018-01-22T05:33:07.453Z", 5747 + "lastChanged": "2018-09-27T07:15:01.459Z", 5748 + "name": { 5749 + "en": "Deadlift (Smith Machine)" 5750 + }, 5751 + "instructions": { 5752 + "en": "Set the smith bar at middle thigh height.Place feet shoulder width apart and grip the bar at shoulder width apart.||Unlock the smith bar, lower hips and bend knees to lower the bar to mid shin level. During the movement ensure the chest is lifted and the core is braced (should be braced the entire movement). ||Pull bar upward extending hips and straightening the torso.||Return weight to the lower position in a controlled motion by breaking at the hips and bending the legs.||Repeat for reps." 5753 + }, 5754 + "media": [ 5755 + { 5756 + "url": "https://files.strong.app/users/global/IMGSPZT7Bbm4I.jpg", 5757 + "type": "IMAGE", 5758 + "contentType": "image/jpeg" 5759 + }, 5760 + { 5761 + "url": "https://files.strong.app/users/global/THUSPZT7Bbm4I%403x.png", 5762 + "type": "THUMBNAIL", 5763 + "contentType": "image/png" 5764 + } 5765 + ], 5766 + "cellTypeConfigs": [ 5767 + { 5768 + "cellType": "OTHER_WEIGHT", 5769 + "mandatory": true 5770 + }, 5771 + { 5772 + "cellType": "REPS", 5773 + "mandatory": true 5774 + }, 5775 + { 5776 + "cellType": "RPE", 5777 + "isExponent": true 5778 + } 5779 + ], 5780 + "isGlobal": true, 5781 + "measurementType": "EXERCISE" 5782 + }, 5783 + { 5784 + "_links": { 5785 + "self": { 5786 + "href": "/api/measurements/84a59482-5faf-451d-b5a9-6e98e868f006" 5787 + }, 5788 + "tag": [ 5789 + { 5790 + "href": "/api/tags/legs" 5791 + } 5792 + ] 5793 + }, 5794 + "id": "84a59482-5faf-451d-b5a9-6e98e868f006", 5795 + "created": "2018-01-22T05:32:59.887Z", 5796 + "lastChanged": "2018-09-20T08:05:58.911Z", 5797 + "name": { 5798 + "en": "Deadlift (Dumbbell)" 5799 + }, 5800 + "instructions": { 5801 + "en": "Hold 1 dumbbell in each hand and place feet shoulder width apart).||Lower hips and bend knees. Lift the chest and take a deep breath to brace the core (should be braced the entire movement). Retract shoulder blades and position dumbbells next to the shins.||Pull dumbbells upward extending hips and straightening the torso.||Return to the starting position by breaking at the hips and bending the legs.||Repeat for reps." 5802 + }, 5803 + "media": [ 5804 + { 5805 + "url": "https://files.strong.app/users/global/IMGxIxdLNbrY7.jpg", 5806 + "type": "IMAGE", 5807 + "contentType": "image/jpeg" 5808 + }, 5809 + { 5810 + "url": "https://files.strong.app/users/global/THUxIxdLNbrY7%403x.png", 5811 + "type": "THUMBNAIL", 5812 + "contentType": "image/png" 5813 + } 5814 + ], 5815 + "cellTypeConfigs": [ 5816 + { 5817 + "cellType": "DUMBBELL_WEIGHT", 5818 + "mandatory": true 5819 + }, 5820 + { 5821 + "cellType": "REPS", 5822 + "mandatory": true 5823 + }, 5824 + { 5825 + "cellType": "RPE", 5826 + "isExponent": true 5827 + } 5828 + ], 5829 + "isGlobal": true, 5830 + "measurementType": "EXERCISE" 5831 + }, 5832 + { 5833 + "_links": { 5834 + "self": { 5835 + "href": "/api/measurements/6edf0381-ebaf-4163-9f0f-f6099f9e29ff" 5836 + }, 5837 + "tag": [ 5838 + { 5839 + "href": "/api/tags/legs" 5840 + } 5841 + ] 5842 + }, 5843 + "id": "6edf0381-ebaf-4163-9f0f-f6099f9e29ff", 5844 + "created": "2018-01-22T05:32:46.648Z", 5845 + "lastChanged": "2018-09-27T07:17:13.807Z", 5846 + "name": { 5847 + "en": "Deadlift (Band)" 5848 + }, 5849 + "instructions": { 5850 + "en": "Place the bands under the foot.||Place feet shoulder width apart and grip the band handles at shoulder width apart.||Lower hips and bend knees. Lift the chest and take a deep breath to brace the core (should be braced the entire movement). Retract shoulder blades to take the slack out of the band. ||Pull handles upward extending hips and straightening the torso.||Return to the starting position by breaking at the hips and bending the legs.||Repeat for reps." 5851 + }, 5852 + "media": [ 5853 + { 5854 + "url": "https://files.strong.app/users/global/IMGGFnv9dBovZ.jpg", 5855 + "type": "IMAGE", 5856 + "contentType": "image/jpeg" 5857 + }, 5858 + { 5859 + "url": "https://files.strong.app/users/global/THUGFnv9dBovZ%403x.png", 5860 + "type": "THUMBNAIL", 5861 + "contentType": "image/png" 5862 + } 5863 + ], 5864 + "cellTypeConfigs": [ 5865 + { 5866 + "cellType": "WEIGHTED_BODYWEIGHT" 5867 + }, 5868 + { 5869 + "cellType": "REPS", 5870 + "mandatory": true 5871 + }, 5872 + { 5873 + "cellType": "RPE", 5874 + "isExponent": true 5875 + } 5876 + ], 5877 + "isGlobal": true, 5878 + "measurementType": "EXERCISE" 5879 + }, 5880 + { 5881 + "_links": { 5882 + "self": { 5883 + "href": "/api/measurements/de39b561-a90f-4212-95a3-84789c6f4813" 5884 + }, 5885 + "tag": [ 5886 + { 5887 + "href": "/api/tags/arms" 5888 + } 5889 + ] 5890 + }, 5891 + "id": "de39b561-a90f-4212-95a3-84789c6f4813", 5892 + "created": "2018-01-22T05:32:40.268Z", 5893 + "lastChanged": "2018-10-15T06:15:24.912Z", 5894 + "name": { 5895 + "en": "Bench Press - Close Grip (Barbell)" 5896 + }, 5897 + "instructions": { 5898 + "en": "Lie on the bench with feet firm on the floor, hold the bar slightly inside of shoulder width.||Lift the bar off the rack above the chest with arms straight.||Retract scapula and have elbows between 45 to 90 degree angle. An advanced tip is to tuck the shoulders down into the sockets and driven back.||Breathe in and lower bar to the middle chest.||After pausing at the bottom, push the bar towards the starting position squeezing the chest.||Repeat for reps." 5899 + }, 5900 + "media": [ 5901 + { 5902 + "url": "https://files.strong.app/users/global/IMGr4ebQCpd46.jpg", 5903 + "type": "IMAGE", 5904 + "contentType": "image/jpeg" 5905 + }, 5906 + { 5907 + "url": "https://files.strong.app/users/global/VIDr4ebQCpd46.mp4", 5908 + "type": "VIDEO", 5909 + "contentType": "video/mp4" 5910 + }, 5911 + { 5912 + "url": "https://files.strong.app/users/global/THUr4ebQCpd46%403x.png", 5913 + "type": "THUMBNAIL", 5914 + "contentType": "image/png" 5915 + } 5916 + ], 5917 + "cellTypeConfigs": [ 5918 + { 5919 + "cellType": "BARBELL_WEIGHT", 5920 + "mandatory": true 5921 + }, 5922 + { 5923 + "cellType": "REPS", 5924 + "mandatory": true 5925 + }, 5926 + { 5927 + "cellType": "RPE", 5928 + "isExponent": true 5929 + } 5930 + ], 5931 + "isGlobal": true, 5932 + "measurementType": "EXERCISE" 5933 + }, 5934 + { 5935 + "_links": { 5936 + "self": { 5937 + "href": "/api/measurements/6ae27da7-92b9-4af9-b2a9-e0afd827c188" 5938 + }, 5939 + "tag": [ 5940 + { 5941 + "href": "/api/tags/chest" 5942 + } 5943 + ] 5944 + }, 5945 + "id": "6ae27da7-92b9-4af9-b2a9-e0afd827c188", 5946 + "created": "2018-01-22T05:17:59.524Z", 5947 + "lastChanged": "2018-09-20T08:04:44.659Z", 5948 + "name": { 5949 + "en": "Chest Press (Machine)" 5950 + }, 5951 + "instructions": { 5952 + "en": "Position handles at the middle to lower chest and adjust seat to appropriate height.||Grab the handles and extend arms at shoulder width.||Retract scapula and have elbows between 45 to 90 degree angle.||As you breathe out, lower handles to the middle chest.||Squeeze chest and push handles.||Repeat for reps." 5953 + }, 5954 + "media": [ 5955 + { 5956 + "url": "https://files.strong.app/users/global/IMGmdGvg7lBkt.jpg", 5957 + "type": "IMAGE", 5958 + "contentType": "image/jpeg" 5959 + }, 5960 + { 5961 + "url": "https://files.strong.app/users/global/VIDmdGvg7lBkt.mp4", 5962 + "type": "VIDEO", 5963 + "contentType": "video/mp4" 5964 + }, 5965 + { 5966 + "url": "https://files.strong.app/users/global/THUmdGvg7lBkt%403x.png", 5967 + "type": "THUMBNAIL", 5968 + "contentType": "image/png" 5969 + } 5970 + ], 5971 + "cellTypeConfigs": [ 5972 + { 5973 + "cellType": "OTHER_WEIGHT", 5974 + "mandatory": true 5975 + }, 5976 + { 5977 + "cellType": "REPS", 5978 + "mandatory": true 5979 + }, 5980 + { 5981 + "cellType": "RPE", 5982 + "isExponent": true 5983 + } 5984 + ], 5985 + "isGlobal": true, 5986 + "measurementType": "EXERCISE" 5987 + }, 5988 + { 5989 + "_links": { 5990 + "self": { 5991 + "href": "/api/measurements/828ec5b3-fc2f-4f29-b372-607dde9c799a" 5992 + }, 5993 + "tag": [ 5994 + { 5995 + "href": "/api/tags/back" 5996 + } 5997 + ] 5998 + }, 5999 + "id": "828ec5b3-fc2f-4f29-b372-607dde9c799a", 6000 + "created": "2018-01-22T05:13:59.473Z", 6001 + "lastChanged": "2018-09-27T07:13:11.19Z", 6002 + "name": { 6003 + "en": "Bent Over Row (Band)" 6004 + }, 6005 + "instructions": { 6006 + "en": "Place band under the mid foot holding the handles at your side, bend the legs and tilt the torso with a straight back.||Flexing the core, keep head in neutral position, pull the handles towards your stomach bringing elbows backward.||Squeeze your back as you breath out at the top position.||Inhale and lower the handles to the starting position.||Repeat for reps." 6007 + }, 6008 + "media": [ 6009 + { 6010 + "url": "https://files.strong.app/users/global/IMG7zM9ZBCFfw.jpg", 6011 + "type": "IMAGE", 6012 + "contentType": "image/jpeg" 6013 + }, 6014 + { 6015 + "url": "https://files.strong.app/users/global/THU7zM9ZBCFfw%403x.png", 6016 + "type": "THUMBNAIL", 6017 + "contentType": "image/png" 6018 + } 6019 + ], 6020 + "cellTypeConfigs": [ 6021 + { 6022 + "cellType": "WEIGHTED_BODYWEIGHT" 6023 + }, 6024 + { 6025 + "cellType": "REPS", 6026 + "mandatory": true 6027 + }, 6028 + { 6029 + "cellType": "RPE", 6030 + "isExponent": true 6031 + } 6032 + ], 6033 + "isGlobal": true, 6034 + "measurementType": "EXERCISE" 6035 + }, 6036 + { 6037 + "_links": { 6038 + "self": { 6039 + "href": "/api/measurements/3c226a8c-4399-4d98-a1fa-339e1672a163" 6040 + }, 6041 + "tag": [ 6042 + { 6043 + "href": "/api/tags/chest" 6044 + } 6045 + ] 6046 + }, 6047 + "id": "3c226a8c-4399-4d98-a1fa-339e1672a163", 6048 + "created": "2018-01-22T05:13:20.895Z", 6049 + "lastChanged": "2018-09-27T07:36:46.029Z", 6050 + "name": { 6051 + "en": "Chest Press (Band)" 6052 + }, 6053 + "instructions": { 6054 + "en": "Secure the band under the bench closest to your middle chest (or nearest location).||Grab the handles and extend arms at shoulder width.||Retract scapla and have elbows between 45 to 90 degree angle.||As you breathe out, lower handles to the middle chest.||Squeeze chest and push handles.||Repeat for reps." 6055 + }, 6056 + "media": [ 6057 + { 6058 + "url": "https://files.strong.app/users/global/IMGKRpFmsWVAn.jpg", 6059 + "type": "IMAGE", 6060 + "contentType": "image/jpeg" 6061 + }, 6062 + { 6063 + "url": "https://files.strong.app/users/global/THUKRpFmsWVAn%403x.png", 6064 + "type": "THUMBNAIL", 6065 + "contentType": "image/png" 6066 + } 6067 + ], 6068 + "cellTypeConfigs": [ 6069 + { 6070 + "cellType": "WEIGHTED_BODYWEIGHT" 6071 + }, 6072 + { 6073 + "cellType": "REPS", 6074 + "mandatory": true 6075 + }, 6076 + { 6077 + "cellType": "RPE", 6078 + "isExponent": true 6079 + } 6080 + ], 6081 + "isGlobal": true, 6082 + "measurementType": "EXERCISE" 6083 + }, 6084 + { 6085 + "_links": { 6086 + "self": { 6087 + "href": "/api/measurements/b820cd1b-1eff-46c5-80b6-12055f927082" 6088 + }, 6089 + "tag": [ 6090 + { 6091 + "href": "/api/tags/chest" 6092 + } 6093 + ] 6094 + }, 6095 + "id": "b820cd1b-1eff-46c5-80b6-12055f927082", 6096 + "created": "2018-01-22T05:13:10.732Z", 6097 + "lastChanged": "2018-09-27T07:15:03.894Z", 6098 + "name": { 6099 + "en": "Chest Fly (Dumbbell)" 6100 + }, 6101 + "instructions": { 6102 + "en": "Lie on a flat bench with a dumbbell in each hand.||Extend arms in front of chest at shoulder width.||With a slight bend at the elbow, lower arms in a circular motion to the side in an open arm position.||Bring dumbbells together in wide hugging motion until dumbbells are nearly together, squeezing the chest at the top of the movement.||Repeat for reps." 6103 + }, 6104 + "media": [ 6105 + { 6106 + "url": "https://files.strong.app/users/global/IMGbAtQEs5GPA.jpg", 6107 + "type": "IMAGE", 6108 + "contentType": "image/jpeg" 6109 + }, 6110 + { 6111 + "url": "https://files.strong.app/users/global/VIDbAtQEs5GPA.mp4", 6112 + "type": "VIDEO", 6113 + "contentType": "video/mp4" 6114 + }, 6115 + { 6116 + "url": "https://files.strong.app/users/global/THUbAtQEs5GPA%403x.png", 6117 + "type": "THUMBNAIL", 6118 + "contentType": "image/png" 6119 + } 6120 + ], 6121 + "cellTypeConfigs": [ 6122 + { 6123 + "cellType": "DUMBBELL_WEIGHT", 6124 + "mandatory": true 6125 + }, 6126 + { 6127 + "cellType": "REPS", 6128 + "mandatory": true 6129 + }, 6130 + { 6131 + "cellType": "RPE", 6132 + "isExponent": true 6133 + } 6134 + ], 6135 + "isGlobal": true, 6136 + "measurementType": "EXERCISE" 6137 + }, 6138 + { 6139 + "_links": { 6140 + "self": { 6141 + "href": "/api/measurements/494b775e-663e-44ea-8cfb-6129de11236f" 6142 + }, 6143 + "tag": [ 6144 + { 6145 + "href": "/api/tags/chest" 6146 + } 6147 + ] 6148 + }, 6149 + "id": "494b775e-663e-44ea-8cfb-6129de11236f", 6150 + "created": "2018-01-22T05:12:59.253Z", 6151 + "lastChanged": "2018-09-27T07:15:04.619Z", 6152 + "name": { 6153 + "en": "Chest Fly (Band)" 6154 + }, 6155 + "instructions": { 6156 + "en": "Secure the band around a stationary object.||Grab the handles and extend arms at shoulder width, steping forward to create the appropriate resistance on the band.||Raise arms to the side with palms facing forward and a slight bend at the elbow.||Bring handles across the chest in a circular motion, squeezing the chest as the hands meet.||Return handles to the starting position and repeat for reps." 6157 + }, 6158 + "media": [ 6159 + { 6160 + "url": "https://files.strong.app/users/global/IMGczFW9wkyG3.jpg", 6161 + "type": "IMAGE", 6162 + "contentType": "image/jpeg" 6163 + }, 6164 + { 6165 + "url": "https://files.strong.app/users/global/THUczFW9wkyG3%403x.png", 6166 + "type": "THUMBNAIL", 6167 + "contentType": "image/png" 6168 + } 6169 + ], 6170 + "cellTypeConfigs": [ 6171 + { 6172 + "cellType": "WEIGHTED_BODYWEIGHT" 6173 + }, 6174 + { 6175 + "cellType": "REPS", 6176 + "mandatory": true 6177 + }, 6178 + { 6179 + "cellType": "RPE", 6180 + "isExponent": true 6181 + } 6182 + ], 6183 + "isGlobal": true, 6184 + "measurementType": "EXERCISE" 6185 + }, 6186 + { 6187 + "_links": { 6188 + "self": { 6189 + "href": "/api/measurements/886d4155-ee4e-40ee-9da6-bda3dd44824d" 6190 + }, 6191 + "tag": [ 6192 + { 6193 + "href": "/api/tags/full-body" 6194 + } 6195 + ] 6196 + }, 6197 + "id": "886d4155-ee4e-40ee-9da6-bda3dd44824d", 6198 + "created": "2018-01-22T05:12:31.585Z", 6199 + "lastChanged": "2018-09-20T08:04:22.134Z", 6200 + "name": { 6201 + "en": "Burpee" 6202 + }, 6203 + "instructions": { 6204 + "en": "Begin with legs shoulder width apart and place hands on the floor in a push up position under the shoulders.||Kick legs back and lower stomach and thighs to touch the floor.||Push from this position while simultaneously bringing knees to the chest and planting feet on the ground.||Extend upward and jump from this position, extending arms upwards returning to beginning position.||Repeat for reps." 6205 + }, 6206 + "media": [ 6207 + { 6208 + "url": "https://files.strong.app/users/global/IMGw1Dq9YoW6f.jpg", 6209 + "type": "IMAGE", 6210 + "contentType": "image/jpeg" 6211 + }, 6212 + { 6213 + "url": "https://files.strong.app/users/global/VIDw1Dq9YoW6f.mp4", 6214 + "type": "VIDEO", 6215 + "contentType": "video/mp4" 6216 + }, 6217 + { 6218 + "url": "https://files.strong.app/users/global/THUw1Dq9YoW6f%403x.png", 6219 + "type": "THUMBNAIL", 6220 + "contentType": "image/png" 6221 + } 6222 + ], 6223 + "cellTypeConfigs": [ 6224 + { 6225 + "cellType": "REPS", 6226 + "mandatory": true 6227 + }, 6228 + { 6229 + "cellType": "RPE", 6230 + "isExponent": true 6231 + } 6232 + ], 6233 + "isGlobal": true, 6234 + "measurementType": "EXERCISE" 6235 + }, 6236 + { 6237 + "_links": { 6238 + "self": { 6239 + "href": "/api/measurements/c6123164-6caa-46f2-aa22-c02b9b52815d" 6240 + }, 6241 + "tag": [ 6242 + { 6243 + "href": "/api/tags/legs" 6244 + } 6245 + ] 6246 + }, 6247 + "id": "c6123164-6caa-46f2-aa22-c02b9b52815d", 6248 + "created": "2018-01-22T05:10:21.839Z", 6249 + "lastChanged": "2018-09-20T06:42:42.757Z", 6250 + "name": { 6251 + "en": "Box Jump" 6252 + }, 6253 + "instructions": { 6254 + "en": "With a box in front, stand with feet shoulder width and slightly bent.||Swinging arms forward and jumping onto the box, land with knees bent to absorb the impact.||Step down from the box one leg at a time.||Repeat for reps and adjust height of box accordingly." 6255 + }, 6256 + "media": [ 6257 + { 6258 + "url": "https://files.strong.app/users/global/IMGefDaW4lEGu.jpg", 6259 + "type": "IMAGE", 6260 + "contentType": "image/jpeg" 6261 + }, 6262 + { 6263 + "url": "https://files.strong.app/users/global/THUefDaW4lEGu%403x.png", 6264 + "type": "THUMBNAIL", 6265 + "contentType": "image/png" 6266 + } 6267 + ], 6268 + "cellTypeConfigs": [ 6269 + { 6270 + "cellType": "REPS", 6271 + "mandatory": true 6272 + }, 6273 + { 6274 + "cellType": "RPE", 6275 + "isExponent": true 6276 + } 6277 + ], 6278 + "isGlobal": true, 6279 + "measurementType": "EXERCISE" 6280 + }, 6281 + { 6282 + "_links": { 6283 + "self": { 6284 + "href": "/api/measurements/59bb3ebb-acab-426b-aedf-6149b8ef9100" 6285 + }, 6286 + "tag": [ 6287 + { 6288 + "href": "/api/tags/chest" 6289 + } 6290 + ] 6291 + }, 6292 + "id": "59bb3ebb-acab-426b-aedf-6149b8ef9100", 6293 + "created": "2018-01-22T05:06:58.483Z", 6294 + "lastChanged": "2018-09-27T07:13:02.732Z", 6295 + "name": { 6296 + "en": "Bench Press (Cable)" 6297 + }, 6298 + "instructions": { 6299 + "en": "Lie flat on the bench holding the cable handles with a shoulder width pronated grip.||Retract scapla and have elbows between 45 to 90 degree angle. An advanced tip is to tuck the shoulders down into the sockets and driven back.||Breathe in and lower handles to the middle chest.||After pausing at the bottom, push handles towards the starting position squeezing the chest.||Repeat for reps." 6300 + }, 6301 + "media": [ 6302 + { 6303 + "url": "https://files.strong.app/users/global/IMGuLlUVLylTn.jpg", 6304 + "type": "IMAGE", 6305 + "contentType": "image/jpeg" 6306 + }, 6307 + { 6308 + "url": "https://files.strong.app/users/global/THUuLlUVLylTn%403x.png", 6309 + "type": "THUMBNAIL", 6310 + "contentType": "image/png" 6311 + } 6312 + ], 6313 + "cellTypeConfigs": [ 6314 + { 6315 + "cellType": "OTHER_WEIGHT", 6316 + "mandatory": true 6317 + }, 6318 + { 6319 + "cellType": "REPS", 6320 + "mandatory": true 6321 + }, 6322 + { 6323 + "cellType": "RPE", 6324 + "isExponent": true 6325 + } 6326 + ], 6327 + "isGlobal": true, 6328 + "measurementType": "EXERCISE" 6329 + }, 6330 + { 6331 + "_links": { 6332 + "self": { 6333 + "href": "/api/measurements/2c9ef821-6ea5-43a5-acbe-380477101d70" 6334 + }, 6335 + "tag": [ 6336 + { 6337 + "href": "/api/tags/cardio" 6338 + } 6339 + ] 6340 + }, 6341 + "id": "2c9ef821-6ea5-43a5-acbe-380477101d70", 6342 + "created": "2018-01-22T04:56:53.628Z", 6343 + "lastChanged": "2018-09-20T06:37:04.156Z", 6344 + "name": { 6345 + "en": "Battle Ropes" 6346 + }, 6347 + "instructions": { 6348 + "en": "Secure the rope and hold each end of the rope in each hand.||Take a active lower stance.||Begin the movement by raising your arms to shoulder level in alternating fashion.||Alternate your left and right arms, moving the ropes as fast as you can.||Repeat for reps or time." 6349 + }, 6350 + "media": [ 6351 + { 6352 + "url": "https://files.strong.app/users/global/IMGzR3cQ5RxaC.jpg", 6353 + "type": "IMAGE", 6354 + "contentType": "image/jpeg" 6355 + }, 6356 + { 6357 + "url": "https://files.strong.app/users/global/THUzR3cQ5RxaC%403x.png", 6358 + "type": "THUMBNAIL", 6359 + "contentType": "image/png" 6360 + } 6361 + ], 6362 + "cellTypeConfigs": [ 6363 + { 6364 + "cellType": "DISTANCE" 6365 + }, 6366 + { 6367 + "cellType": "DURATION" 6368 + } 6369 + ], 6370 + "isGlobal": true, 6371 + "measurementType": "EXERCISE" 6372 + }, 6373 + { 6374 + "_links": { 6375 + "self": { 6376 + "href": "/api/measurements/f267d09a-c60e-4b29-83d3-d50f00ce88da" 6377 + }, 6378 + "tag": [ 6379 + { 6380 + "href": "/api/tags/back" 6381 + } 6382 + ] 6383 + }, 6384 + "id": "f267d09a-c60e-4b29-83d3-d50f00ce88da", 6385 + "created": "2018-01-22T04:50:31.681Z", 6386 + "lastChanged": "2018-09-27T07:12:14.72Z", 6387 + "name": { 6388 + "en": "Pull Up (Band)" 6389 + }, 6390 + "instructions": { 6391 + "en": "Tie the band around the center of the pull up bar. Pull the end of the band and either position it below your bent knee or under foot.||Take a shoulder width grip on the bar.|| Pull upward by contracting the lats and driving the elbows to the side of the body.||Attempt to keep the body straight and controlled during the movement.||Repeat for reps." 6392 + }, 6393 + "media": [ 6394 + { 6395 + "url": "https://files.strong.app/users/global/IMGiIePQSUR0p.jpg", 6396 + "type": "IMAGE", 6397 + "contentType": "image/jpeg" 6398 + }, 6399 + { 6400 + "url": "https://files.strong.app/users/global/THUiIePQSUR0p%403x.png", 6401 + "type": "THUMBNAIL", 6402 + "contentType": "image/png" 6403 + } 6404 + ], 6405 + "cellTypeConfigs": [ 6406 + { 6407 + "cellType": "ASSISTED_BODYWEIGHT" 6408 + }, 6409 + { 6410 + "cellType": "REPS", 6411 + "mandatory": true 6412 + }, 6413 + { 6414 + "cellType": "RPE", 6415 + "isExponent": true 6416 + } 6417 + ], 6418 + "isGlobal": true, 6419 + "measurementType": "EXERCISE" 6420 + }, 6421 + { 6422 + "_links": { 6423 + "self": { 6424 + "href": "/api/measurements/a467f043-c96e-43c8-9133-a33eb8e62ded" 6425 + }, 6426 + "tag": [ 6427 + { 6428 + "href": "/api/tags/legs" 6429 + } 6430 + ] 6431 + }, 6432 + "id": "a467f043-c96e-43c8-9133-a33eb8e62ded", 6433 + "created": "2016-06-30T14:22:51.035Z", 6434 + "lastChanged": "2017-12-15T07:25:51.873Z", 6435 + "name": { 6436 + "en": "Leg Press" 6437 + }, 6438 + "instructions": { 6439 + "en": "Place feet shoulder width apart in a position where the knees would not pass the feet at the bottom of the leg press movement.||Push through the heel and midfoot and lower the safety bars, making sure to brace the core and keeping knees pointed slightly outward.||Lower the weight platform until the legs create a 90 degree angle.||Push using the quads to the starting position, making sure knees are not locked.||Repeat for reps." 6440 + }, 6441 + "media": [ 6442 + { 6443 + "url": "https://files.strong.app/users/global/VIDopctrOWR15.mp4", 6444 + "type": "VIDEO", 6445 + "contentType": "video/mp4" 6446 + }, 6447 + { 6448 + "url": "https://files.strong.app/users/global/THUopctrOWR15%403x.png", 6449 + "type": "THUMBNAIL", 6450 + "contentType": "image/png" 6451 + } 6452 + ], 6453 + "cellTypeConfigs": [ 6454 + { 6455 + "cellType": "OTHER_WEIGHT", 6456 + "mandatory": true 6457 + }, 6458 + { 6459 + "cellType": "REPS", 6460 + "mandatory": true 6461 + }, 6462 + { 6463 + "cellType": "RPE", 6464 + "isExponent": true 6465 + } 6466 + ], 6467 + "isGlobal": true, 6468 + "measurementType": "EXERCISE" 6469 + }, 6470 + { 6471 + "_links": { 6472 + "self": { 6473 + "href": "/api/measurements/6de1b274-f023-49f2-94ec-add08373b7e4" 6474 + }, 6475 + "tag": [ 6476 + { 6477 + "href": "/api/tags/cardio" 6478 + } 6479 + ] 6480 + }, 6481 + "id": "6de1b274-f023-49f2-94ec-add08373b7e4", 6482 + "created": "2016-02-19T05:42:36.756Z", 6483 + "lastChanged": "2017-12-06T13:45:30.693Z", 6484 + "name": { 6485 + "en": "Yoga" 6486 + }, 6487 + "media": [], 6488 + "cellTypeConfigs": [ 6489 + { 6490 + "cellType": "DURATION", 6491 + "mandatory": true 6492 + } 6493 + ], 6494 + "isGlobal": true, 6495 + "measurementType": "EXERCISE" 6496 + }, 6497 + { 6498 + "_links": { 6499 + "self": { 6500 + "href": "/api/measurements/a4689d35-a845-4ad0-aa79-84005b8b9d27" 6501 + }, 6502 + "tag": [ 6503 + { 6504 + "href": "/api/tags/other" 6505 + } 6506 + ] 6507 + }, 6508 + "id": "a4689d35-a845-4ad0-aa79-84005b8b9d27", 6509 + "created": "2016-02-19T05:42:36.73Z", 6510 + "lastChanged": "2017-12-15T07:34:48.704Z", 6511 + "name": { 6512 + "en": "Stretching" 6513 + }, 6514 + "instructions": { 6515 + "en": "Get into stretch position and hold while breathing deeply." 6516 + }, 6517 + "media": [ 6518 + { 6519 + "url": "https://files.strong.app/users/global/IMGsF7pS30rn4.jpg", 6520 + "type": "IMAGE", 6521 + "contentType": "image/jpeg" 6522 + }, 6523 + { 6524 + "url": "https://files.strong.app/users/global/THUsF7pS30rn4%403x.png", 6525 + "type": "THUMBNAIL", 6526 + "contentType": "image/png" 6527 + } 6528 + ], 6529 + "cellTypeConfigs": [ 6530 + { 6531 + "cellType": "DURATION", 6532 + "mandatory": true 6533 + } 6534 + ], 6535 + "isGlobal": true, 6536 + "measurementType": "EXERCISE" 6537 + }, 6538 + { 6539 + "_links": { 6540 + "self": { 6541 + "href": "/api/measurements/7837fcaf-0843-491c-bd3b-cf579cfa06b0" 6542 + }, 6543 + "tag": [ 6544 + { 6545 + "href": "/api/tags/core" 6546 + } 6547 + ] 6548 + }, 6549 + "id": "7837fcaf-0843-491c-bd3b-cf579cfa06b0", 6550 + "created": "2016-02-19T05:42:36.723Z", 6551 + "lastChanged": "2017-12-15T07:30:45.394Z", 6552 + "name": { 6553 + "en": "Side Plank" 6554 + }, 6555 + "instructions": { 6556 + "en": "Lie on side and support weight on the elbow and forearm.||Prop up body by keeping core tight and legs straight.||Hold for time." 6557 + }, 6558 + "media": [ 6559 + { 6560 + "url": "https://files.strong.app/users/global/IMGFeS0BZiBCh.jpg", 6561 + "type": "IMAGE", 6562 + "contentType": "image/jpeg" 6563 + }, 6564 + { 6565 + "url": "https://files.strong.app/users/global/THUFeS0BZiBCh%403x.png", 6566 + "type": "THUMBNAIL", 6567 + "contentType": "image/png" 6568 + } 6569 + ], 6570 + "cellTypeConfigs": [ 6571 + { 6572 + "cellType": "DURATION", 6573 + "mandatory": true 6574 + } 6575 + ], 6576 + "isGlobal": true, 6577 + "measurementType": "EXERCISE" 6578 + }, 6579 + { 6580 + "_links": { 6581 + "self": { 6582 + "href": "/api/measurements/943cb841-6157-4021-b842-612bd9f8b4e0" 6583 + }, 6584 + "tag": [ 6585 + { 6586 + "href": "/api/tags/core" 6587 + } 6588 + ] 6589 + }, 6590 + "id": "943cb841-6157-4021-b842-612bd9f8b4e0", 6591 + "created": "2016-02-19T05:42:36.681Z", 6592 + "lastChanged": "2017-12-15T07:27:45.271Z", 6593 + "name": { 6594 + "en": "Plank" 6595 + }, 6596 + "instructions": { 6597 + "en": "Support the body by the forearms and the toes on the floor while bracing the core.||The arms should be directly below the shoulder and the torso should be straight and flexed.||Hold for time." 6598 + }, 6599 + "media": [ 6600 + { 6601 + "url": "https://files.strong.app/users/global/VIDLLGQxB4dD9.mp4", 6602 + "type": "VIDEO", 6603 + "contentType": "video/mp4" 6604 + }, 6605 + { 6606 + "url": "https://files.strong.app/users/global/THULLGQxB4dD9%403x.png", 6607 + "type": "THUMBNAIL", 6608 + "contentType": "image/png" 6609 + } 6610 + ], 6611 + "cellTypeConfigs": [ 6612 + { 6613 + "cellType": "DURATION", 6614 + "mandatory": true 6615 + } 6616 + ], 6617 + "isGlobal": true, 6618 + "measurementType": "EXERCISE" 6619 + }, 6620 + { 6621 + "_links": { 6622 + "self": { 6623 + "href": "/api/measurements/0ea248ec-76d2-47b1-aba5-c35160a3236f" 6624 + }, 6625 + "tag": [ 6626 + { 6627 + "href": "/api/tags/cardio" 6628 + } 6629 + ] 6630 + }, 6631 + "id": "0ea248ec-76d2-47b1-aba5-c35160a3236f", 6632 + "created": "2016-02-19T05:42:35.179Z", 6633 + "lastChanged": "2017-12-06T13:45:43.206Z", 6634 + "name": { 6635 + "en": "Climbing" 6636 + }, 6637 + "media": [], 6638 + "cellTypeConfigs": [ 6639 + { 6640 + "cellType": "DURATION", 6641 + "mandatory": true 6642 + } 6643 + ], 6644 + "isGlobal": true, 6645 + "measurementType": "EXERCISE" 6646 + }, 6647 + { 6648 + "_links": { 6649 + "self": { 6650 + "href": "/api/measurements/05aa6d82-6388-4c3d-87a5-8d8edc1b3431" 6651 + }, 6652 + "tag": [ 6653 + { 6654 + "href": "/api/tags/cardio" 6655 + } 6656 + ] 6657 + }, 6658 + "id": "05aa6d82-6388-4c3d-87a5-8d8edc1b3431", 6659 + "created": "2016-02-19T05:42:35.172Z", 6660 + "lastChanged": "2017-12-06T13:45:56.587Z", 6661 + "name": { 6662 + "en": "Aerobics" 6663 + }, 6664 + "media": [], 6665 + "cellTypeConfigs": [ 6666 + { 6667 + "cellType": "DURATION", 6668 + "mandatory": true 6669 + } 6670 + ], 6671 + "isGlobal": true, 6672 + "measurementType": "EXERCISE" 6673 + }, 6674 + { 6675 + "_links": { 6676 + "self": { 6677 + "href": "/api/measurements/fbcdaa3f-9dbd-4622-b7bc-6f45e1267feb" 6678 + }, 6679 + "tag": [ 6680 + { 6681 + "href": "/api/tags/cardio" 6682 + } 6683 + ] 6684 + }, 6685 + "id": "fbcdaa3f-9dbd-4622-b7bc-6f45e1267feb", 6686 + "created": "2016-02-19T05:42:35.166Z", 6687 + "lastChanged": "2018-09-21T09:45:24.702Z", 6688 + "name": { 6689 + "en": "Rowing (Machine)" 6690 + }, 6691 + "instructions": { 6692 + "en": "Sit on seat. Position and secure feet on platform. ||Grasp handle bar with both hands, over hand grip. With legs extended, pull handle bar to midsection, forearms horizontal.||Perform for time." 6693 + }, 6694 + "media": [ 6695 + { 6696 + "url": "https://files.strong.app/users/global/IMGT3DFEPPi32.jpg", 6697 + "type": "IMAGE", 6698 + "contentType": "image/jpeg" 6699 + }, 6700 + { 6701 + "url": "https://files.strong.app/users/global/THUT3DFEPPi32%403x.png", 6702 + "type": "THUMBNAIL", 6703 + "contentType": "image/png" 6704 + } 6705 + ], 6706 + "cellTypeConfigs": [ 6707 + { 6708 + "cellType": "DISTANCE" 6709 + }, 6710 + { 6711 + "cellType": "DURATION" 6712 + } 6713 + ], 6714 + "isGlobal": true, 6715 + "measurementType": "EXERCISE" 6716 + }, 6717 + { 6718 + "_links": { 6719 + "self": { 6720 + "href": "/api/measurements/a8225200-79fb-4131-8ea2-c4df95f56c77" 6721 + }, 6722 + "tag": [ 6723 + { 6724 + "href": "/api/tags/cardio" 6725 + } 6726 + ] 6727 + }, 6728 + "id": "a8225200-79fb-4131-8ea2-c4df95f56c77", 6729 + "created": "2016-02-19T05:42:35.16Z", 6730 + "lastChanged": "2017-12-06T13:46:14.551Z", 6731 + "name": { 6732 + "en": "Swimming" 6733 + }, 6734 + "media": [], 6735 + "cellTypeConfigs": [ 6736 + { 6737 + "cellType": "DISTANCE" 6738 + }, 6739 + { 6740 + "cellType": "DURATION" 6741 + } 6742 + ], 6743 + "isGlobal": true, 6744 + "measurementType": "EXERCISE" 6745 + }, 6746 + { 6747 + "_links": { 6748 + "self": { 6749 + "href": "/api/measurements/95aef7e7-e232-4442-851e-2231e7b54317" 6750 + }, 6751 + "tag": [ 6752 + { 6753 + "href": "/api/tags/cardio" 6754 + } 6755 + ] 6756 + }, 6757 + "id": "95aef7e7-e232-4442-851e-2231e7b54317", 6758 + "created": "2016-02-19T05:42:35.155Z", 6759 + "lastChanged": "2017-12-06T13:46:17.704Z", 6760 + "name": { 6761 + "en": "Skating" 6762 + }, 6763 + "media": [], 6764 + "cellTypeConfigs": [ 6765 + { 6766 + "cellType": "DISTANCE" 6767 + }, 6768 + { 6769 + "cellType": "DURATION" 6770 + } 6771 + ], 6772 + "isGlobal": true, 6773 + "measurementType": "EXERCISE" 6774 + }, 6775 + { 6776 + "_links": { 6777 + "self": { 6778 + "href": "/api/measurements/9f09ef70-ea15-49a1-b6a2-0d197e95bf3b" 6779 + }, 6780 + "tag": [ 6781 + { 6782 + "href": "/api/tags/cardio" 6783 + } 6784 + ] 6785 + }, 6786 + "id": "9f09ef70-ea15-49a1-b6a2-0d197e95bf3b", 6787 + "created": "2016-02-19T05:42:35.15Z", 6788 + "lastChanged": "2017-12-06T13:46:20.536Z", 6789 + "name": { 6790 + "en": "Snowboarding" 6791 + }, 6792 + "media": [], 6793 + "cellTypeConfigs": [ 6794 + { 6795 + "cellType": "DISTANCE" 6796 + }, 6797 + { 6798 + "cellType": "DURATION" 6799 + } 6800 + ], 6801 + "isGlobal": true, 6802 + "measurementType": "EXERCISE" 6803 + }, 6804 + { 6805 + "_links": { 6806 + "self": { 6807 + "href": "/api/measurements/1a7d1360-cffb-4972-9e6b-70e7e5d3e6f0" 6808 + }, 6809 + "tag": [ 6810 + { 6811 + "href": "/api/tags/cardio" 6812 + } 6813 + ] 6814 + }, 6815 + "id": "1a7d1360-cffb-4972-9e6b-70e7e5d3e6f0", 6816 + "created": "2016-02-19T05:42:35.143Z", 6817 + "lastChanged": "2017-12-06T13:46:23.202Z", 6818 + "name": { 6819 + "en": "Skiing" 6820 + }, 6821 + "media": [], 6822 + "cellTypeConfigs": [ 6823 + { 6824 + "cellType": "DISTANCE" 6825 + }, 6826 + { 6827 + "cellType": "DURATION" 6828 + } 6829 + ], 6830 + "isGlobal": true, 6831 + "measurementType": "EXERCISE" 6832 + }, 6833 + { 6834 + "_links": { 6835 + "self": { 6836 + "href": "/api/measurements/8ca4f443-ff3b-4501-97da-47c0792b2e40" 6837 + }, 6838 + "tag": [ 6839 + { 6840 + "href": "/api/tags/cardio" 6841 + } 6842 + ] 6843 + }, 6844 + "id": "8ca4f443-ff3b-4501-97da-47c0792b2e40", 6845 + "created": "2016-02-19T05:42:35.138Z", 6846 + "lastChanged": "2017-12-06T13:46:27.528Z", 6847 + "name": { 6848 + "en": "Hiking" 6849 + }, 6850 + "media": [], 6851 + "cellTypeConfigs": [ 6852 + { 6853 + "cellType": "DISTANCE" 6854 + }, 6855 + { 6856 + "cellType": "DURATION" 6857 + } 6858 + ], 6859 + "isGlobal": true, 6860 + "measurementType": "EXERCISE" 6861 + }, 6862 + { 6863 + "_links": { 6864 + "self": { 6865 + "href": "/api/measurements/f7c7a96b-7586-4e2b-b972-3e9e821d8f95" 6866 + }, 6867 + "tag": [ 6868 + { 6869 + "href": "/api/tags/cardio" 6870 + } 6871 + ] 6872 + }, 6873 + "id": "f7c7a96b-7586-4e2b-b972-3e9e821d8f95", 6874 + "created": "2016-02-19T05:42:35.131Z", 6875 + "lastChanged": "2017-12-06T13:46:30.776Z", 6876 + "name": { 6877 + "en": "Walking" 6878 + }, 6879 + "media": [], 6880 + "cellTypeConfigs": [ 6881 + { 6882 + "cellType": "DISTANCE" 6883 + }, 6884 + { 6885 + "cellType": "DURATION" 6886 + } 6887 + ], 6888 + "isGlobal": true, 6889 + "measurementType": "EXERCISE" 6890 + }, 6891 + { 6892 + "_links": { 6893 + "self": { 6894 + "href": "/api/measurements/609a559a-a6a7-424b-8ac9-3d61d254e6d3" 6895 + }, 6896 + "tag": [ 6897 + { 6898 + "href": "/api/tags/cardio" 6899 + } 6900 + ] 6901 + }, 6902 + "id": "609a559a-a6a7-424b-8ac9-3d61d254e6d3", 6903 + "created": "2016-02-19T05:42:35.125Z", 6904 + "lastChanged": "2017-12-06T13:46:33.751Z", 6905 + "name": { 6906 + "en": "Cycling" 6907 + }, 6908 + "media": [], 6909 + "cellTypeConfigs": [ 6910 + { 6911 + "cellType": "DISTANCE" 6912 + }, 6913 + { 6914 + "cellType": "DURATION" 6915 + } 6916 + ], 6917 + "isGlobal": true, 6918 + "measurementType": "EXERCISE" 6919 + }, 6920 + { 6921 + "_links": { 6922 + "self": { 6923 + "href": "/api/measurements/a35d3d7c-6093-47b9-b4dc-939c4d799169" 6924 + }, 6925 + "tag": [ 6926 + { 6927 + "href": "/api/tags/cardio" 6928 + } 6929 + ] 6930 + }, 6931 + "id": "a35d3d7c-6093-47b9-b4dc-939c4d799169", 6932 + "created": "2016-02-19T05:42:35.12Z", 6933 + "lastChanged": "2017-12-06T13:46:36.13Z", 6934 + "name": { 6935 + "en": "Running" 6936 + }, 6937 + "media": [ 6938 + { 6939 + "url": "https://files.strong.app/users/global/VIDmdRJCMRsjr.mp4", 6940 + "type": "VIDEO", 6941 + "contentType": "video/mp4" 6942 + }, 6943 + { 6944 + "url": "https://files.strong.app/users/global/THUmdRJCMRsjr%403x.png", 6945 + "type": "THUMBNAIL", 6946 + "contentType": "image/png" 6947 + } 6948 + ], 6949 + "cellTypeConfigs": [ 6950 + { 6951 + "cellType": "DISTANCE" 6952 + }, 6953 + { 6954 + "cellType": "DURATION" 6955 + } 6956 + ], 6957 + "isGlobal": true, 6958 + "measurementType": "EXERCISE" 6959 + }, 6960 + { 6961 + "_links": { 6962 + "self": { 6963 + "href": "/api/measurements/accd839b-4059-451c-b310-1c8aa2739ace" 6964 + }, 6965 + "tag": [ 6966 + { 6967 + "href": "/api/tags/core" 6968 + } 6969 + ] 6970 + }, 6971 + "id": "accd839b-4059-451c-b310-1c8aa2739ace", 6972 + "created": "2016-02-19T05:42:35.114Z", 6973 + "lastChanged": "2018-09-21T09:34:05.61Z", 6974 + "name": { 6975 + "en": "V Up" 6976 + }, 6977 + "instructions": { 6978 + "en": "Begin in a seated position, with hands and feet on the floor.||Slowly contract your abdominal muscles and core and lift your legs up to a 45-degree angle.||Reach your arms straight forward or reach up toward your shins as you are able.||Hold for time." 6979 + }, 6980 + "media": [ 6981 + { 6982 + "url": "https://files.strong.app/users/global/VIDM6CwTcmoX7.mp4", 6983 + "type": "VIDEO", 6984 + "contentType": "video/mp4" 6985 + }, 6986 + { 6987 + "url": "https://files.strong.app/users/global/THUM6CwTcmoX7%403x.png", 6988 + "type": "THUMBNAIL", 6989 + "contentType": "image/png" 6990 + } 6991 + ], 6992 + "cellTypeConfigs": [ 6993 + { 6994 + "cellType": "REPS", 6995 + "mandatory": true 6996 + }, 6997 + { 6998 + "cellType": "RPE", 6999 + "isExponent": true 7000 + } 7001 + ], 7002 + "isGlobal": true, 7003 + "measurementType": "EXERCISE" 7004 + }, 7005 + { 7006 + "_links": { 7007 + "self": { 7008 + "href": "/api/measurements/39c9395b-da2d-40d6-b18c-2a3ab22e3a50" 7009 + }, 7010 + "tag": [ 7011 + { 7012 + "href": "/api/tags/core" 7013 + } 7014 + ] 7015 + }, 7016 + "id": "39c9395b-da2d-40d6-b18c-2a3ab22e3a50", 7017 + "created": "2016-02-19T05:42:35.107Z", 7018 + "lastChanged": "2017-12-15T07:34:59.993Z", 7019 + "name": { 7020 + "en": "Superman" 7021 + }, 7022 + "instructions": { 7023 + "en": "Lie flat on the floor with arms and legs fully extended.||Simultaneously raise arms, legs and chest and hold.||Return to starting position.||Repeat for reps." 7024 + }, 7025 + "media": [ 7026 + { 7027 + "url": "https://files.strong.app/users/global/IMGonIhviUqp4.jpg", 7028 + "type": "IMAGE", 7029 + "contentType": "image/jpeg" 7030 + }, 7031 + { 7032 + "url": "https://files.strong.app/users/global/THUonIhviUqp4%403x.png", 7033 + "type": "THUMBNAIL", 7034 + "contentType": "image/png" 7035 + } 7036 + ], 7037 + "cellTypeConfigs": [ 7038 + { 7039 + "cellType": "REPS", 7040 + "mandatory": true 7041 + }, 7042 + { 7043 + "cellType": "RPE", 7044 + "isExponent": true 7045 + } 7046 + ], 7047 + "isGlobal": true, 7048 + "measurementType": "EXERCISE" 7049 + }, 7050 + { 7051 + "_links": { 7052 + "self": { 7053 + "href": "/api/measurements/f56c1c33-30be-4259-8ace-7ffc1bfea1d7" 7054 + }, 7055 + "tag": [ 7056 + { 7057 + "href": "/api/tags/core" 7058 + } 7059 + ] 7060 + }, 7061 + "id": "f56c1c33-30be-4259-8ace-7ffc1bfea1d7", 7062 + "created": "2016-02-19T05:42:35.102Z", 7063 + "lastChanged": "2017-12-15T07:29:54.918Z", 7064 + "name": { 7065 + "en": "Russian Twist" 7066 + }, 7067 + "instructions": { 7068 + "en": "Sitting on the floor, place feet under a weight while torso is slightly bent so it forms a V with the thighs.||Twist torso with hands clasped in front from side to side.||Repeat for reps." 7069 + }, 7070 + "media": [ 7071 + { 7072 + "url": "https://files.strong.app/users/global/VIDx9TruHcdfC.mp4", 7073 + "type": "VIDEO", 7074 + "contentType": "video/mp4" 7075 + }, 7076 + { 7077 + "url": "https://files.strong.app/users/global/THUx9TruHcdfC%403x.png", 7078 + "type": "THUMBNAIL", 7079 + "contentType": "image/png" 7080 + } 7081 + ], 7082 + "cellTypeConfigs": [ 7083 + { 7084 + "cellType": "REPS", 7085 + "mandatory": true 7086 + }, 7087 + { 7088 + "cellType": "RPE", 7089 + "isExponent": true 7090 + } 7091 + ], 7092 + "isGlobal": true, 7093 + "measurementType": "EXERCISE" 7094 + }, 7095 + { 7096 + "_links": { 7097 + "self": { 7098 + "href": "/api/measurements/9d6c15df-f4a9-4e18-92b3-259a8f43a356" 7099 + }, 7100 + "tag": [ 7101 + { 7102 + "href": "/api/tags/core" 7103 + } 7104 + ] 7105 + }, 7106 + "id": "9d6c15df-f4a9-4e18-92b3-259a8f43a356", 7107 + "created": "2016-02-19T05:42:35.096Z", 7108 + "lastChanged": "2017-12-15T07:27:09.292Z", 7109 + "name": { 7110 + "en": "Oblique Crunch" 7111 + }, 7112 + "instructions": { 7113 + "en": "Secure band to an elevated object so that it is taut at shoulder level and hold the handle in the left hand.||Bend the torso and contract the obliques while exhaling.||Return slowly to the starting position while inhaling.||Repeat for reps." 7114 + }, 7115 + "media": [ 7116 + { 7117 + "url": "https://files.strong.app/users/global/VIDh2ql9tzNox.mp4", 7118 + "type": "VIDEO", 7119 + "contentType": "video/mp4" 7120 + }, 7121 + { 7122 + "url": "https://files.strong.app/users/global/THUh2ql9tzNox%403x.png", 7123 + "type": "THUMBNAIL", 7124 + "contentType": "image/png" 7125 + } 7126 + ], 7127 + "cellTypeConfigs": [ 7128 + { 7129 + "cellType": "REPS", 7130 + "mandatory": true 7131 + }, 7132 + { 7133 + "cellType": "RPE", 7134 + "isExponent": true 7135 + } 7136 + ], 7137 + "isGlobal": true, 7138 + "measurementType": "EXERCISE" 7139 + }, 7140 + { 7141 + "_links": { 7142 + "self": { 7143 + "href": "/api/measurements/d29b9cde-54e4-41df-b3ef-2e7e9bb05806" 7144 + }, 7145 + "tag": [ 7146 + { 7147 + "href": "/api/tags/legs" 7148 + } 7149 + ] 7150 + }, 7151 + "id": "d29b9cde-54e4-41df-b3ef-2e7e9bb05806", 7152 + "created": "2016-02-19T05:42:35.091Z", 7153 + "lastChanged": "2018-09-21T09:42:13.062Z", 7154 + "name": { 7155 + "en": "Mountain Climber" 7156 + }, 7157 + "instructions": { 7158 + "en": "Starting in pushup position, with hands under shoulders and legs extended behind you.||Bring knee of the left leg upward towards the chest.||When leg is fully contracted under the body, extend the left leg while contracted the right leg in quick succession.||Repeat for reps." 7159 + }, 7160 + "media": [ 7161 + { 7162 + "url": "https://files.strong.app/users/global/IMGbgw9oBWtKR.jpg", 7163 + "type": "IMAGE", 7164 + "contentType": "image/jpeg" 7165 + }, 7166 + { 7167 + "url": "https://files.strong.app/users/global/THUbgw9oBWtKR%403x.png", 7168 + "type": "THUMBNAIL", 7169 + "contentType": "image/png" 7170 + } 7171 + ], 7172 + "cellTypeConfigs": [ 7173 + { 7174 + "cellType": "REPS", 7175 + "mandatory": true 7176 + }, 7177 + { 7178 + "cellType": "RPE", 7179 + "isExponent": true 7180 + } 7181 + ], 7182 + "isGlobal": true, 7183 + "measurementType": "EXERCISE" 7184 + }, 7185 + { 7186 + "_links": { 7187 + "self": { 7188 + "href": "/api/measurements/0891014c-f2f0-4883-acdd-6dead68ced8e" 7189 + }, 7190 + "tag": [ 7191 + { 7192 + "href": "/api/tags/legs" 7193 + } 7194 + ] 7195 + }, 7196 + "id": "0891014c-f2f0-4883-acdd-6dead68ced8e", 7197 + "created": "2016-02-19T05:42:35.084Z", 7198 + "lastChanged": "2017-12-15T07:26:02.753Z", 7199 + "name": { 7200 + "en": "Lunge (Bodyweight)" 7201 + }, 7202 + "instructions": { 7203 + "en": "With feet shoulder width apart in an upright position, take a medium length stride forward.||Descend by bending the forward leg to a comfortable position where the rear knee is just above the floor.||Knee should be roughly 90 degrees. Avoid knee extending far beyond the foot to prevent uneeded stress on joint.||Push upward with your forward foot, coming back to the starting position.||Repeat for reps." 7204 + }, 7205 + "media": [ 7206 + { 7207 + "url": "https://files.strong.app/users/global/VID11ni98ldvb.mp4", 7208 + "type": "VIDEO", 7209 + "contentType": "video/mp4" 7210 + }, 7211 + { 7212 + "url": "https://files.strong.app/users/global/THU11ni98ldvb%403x.png", 7213 + "type": "THUMBNAIL", 7214 + "contentType": "image/png" 7215 + } 7216 + ], 7217 + "cellTypeConfigs": [ 7218 + { 7219 + "cellType": "REPS", 7220 + "mandatory": true 7221 + }, 7222 + { 7223 + "cellType": "RPE", 7224 + "isExponent": true 7225 + } 7226 + ], 7227 + "isGlobal": true, 7228 + "measurementType": "EXERCISE" 7229 + }, 7230 + { 7231 + "_links": { 7232 + "self": { 7233 + "href": "/api/measurements/b444429e-86ba-4b58-9584-224c9148e0ab" 7234 + }, 7235 + "tag": [ 7236 + { 7237 + "href": "/api/tags/chest" 7238 + } 7239 + ] 7240 + }, 7241 + "id": "b444429e-86ba-4b58-9584-224c9148e0ab", 7242 + "created": "2016-02-19T05:42:35.078Z", 7243 + "lastChanged": "2018-09-21T09:42:50.821Z", 7244 + "name": { 7245 + "en": "Push Up (Knees)" 7246 + }, 7247 + "instructions": { 7248 + "en": "Lie prone on floor with hands slightly wider than shoulder width and knees on the floor.||Raise body up off floor by extending arms with body straight.||Keeping body straight, lower body to floor by bending arms. Push body up until arms are extended.||Repeat for reps." 7249 + }, 7250 + "media": [ 7251 + { 7252 + "url": "https://files.strong.app/users/global/IMGChYcydZI9m.jpg", 7253 + "type": "IMAGE", 7254 + "contentType": "image/jpeg" 7255 + }, 7256 + { 7257 + "url": "https://files.strong.app/users/global/THUChYcydZI9m%403x.png", 7258 + "type": "THUMBNAIL", 7259 + "contentType": "image/png" 7260 + } 7261 + ], 7262 + "cellTypeConfigs": [ 7263 + { 7264 + "cellType": "REPS", 7265 + "mandatory": true 7266 + }, 7267 + { 7268 + "cellType": "RPE", 7269 + "isExponent": true 7270 + } 7271 + ], 7272 + "isGlobal": true, 7273 + "measurementType": "EXERCISE" 7274 + }, 7275 + { 7276 + "_links": { 7277 + "self": { 7278 + "href": "/api/measurements/4d2ae4fc-1cf8-4d12-b1f6-b1d607b9b8b4" 7279 + }, 7280 + "tag": [ 7281 + { 7282 + "href": "/api/tags/core" 7283 + } 7284 + ] 7285 + }, 7286 + "id": "4d2ae4fc-1cf8-4d12-b1f6-b1d607b9b8b4", 7287 + "created": "2016-02-19T05:42:35.072Z", 7288 + "lastChanged": "2018-09-21T10:00:37.474Z", 7289 + "name": { 7290 + "en": "Hanging Knee Raise" 7291 + }, 7292 + "instructions": { 7293 + "en": "Hang from a bar with arms extended and legs straight down.||Contract abs and bring your knees up to your chest.||Hold position while keeping core tight, then return to the starting position.||Repeat for reps." 7294 + }, 7295 + "media": [ 7296 + { 7297 + "url": "https://files.strong.app/users/global/IMG81rcHmnCrI.jpg", 7298 + "type": "IMAGE", 7299 + "contentType": "image/jpeg" 7300 + }, 7301 + { 7302 + "url": "https://files.strong.app/users/global/THU81rcHmnCrI%403x.png", 7303 + "type": "THUMBNAIL", 7304 + "contentType": "image/png" 7305 + } 7306 + ], 7307 + "cellTypeConfigs": [ 7308 + { 7309 + "cellType": "REPS", 7310 + "mandatory": true 7311 + }, 7312 + { 7313 + "cellType": "RPE", 7314 + "isExponent": true 7315 + } 7316 + ], 7317 + "isGlobal": true, 7318 + "measurementType": "EXERCISE" 7319 + }, 7320 + { 7321 + "_links": { 7322 + "self": { 7323 + "href": "/api/measurements/faa4fd79-b28f-40d9-b528-023a0ae23b26" 7324 + }, 7325 + "tag": [ 7326 + { 7327 + "href": "/api/tags/back" 7328 + } 7329 + ] 7330 + }, 7331 + "id": "faa4fd79-b28f-40d9-b528-023a0ae23b26", 7332 + "created": "2016-02-19T05:42:35.066Z", 7333 + "lastChanged": "2018-01-02T11:58:31.962Z", 7334 + "name": { 7335 + "en": "Kipping Pull Up" 7336 + }, 7337 + "instructions": { 7338 + "en": "Grab the bar with a slightly wider than shoulder overhand grip.||Swing legs forwards and backwards to gain momentum, making sure to retract your shoulders and hyperextending your lower back on the forward motion.||Swing legs forward until thighs are horizontal, then swing upwards.||Use the momentum to pull yourself towards the bar until your upper chest makes contact.||Allow your body to fall back under the bar and swing legs back.||Repeat for reps." 7339 + }, 7340 + "media": [], 7341 + "cellTypeConfigs": [ 7342 + { 7343 + "cellType": "REPS", 7344 + "mandatory": true 7345 + }, 7346 + { 7347 + "cellType": "RPE", 7348 + "isExponent": true 7349 + } 7350 + ], 7351 + "isGlobal": true, 7352 + "measurementType": "EXERCISE" 7353 + }, 7354 + { 7355 + "_links": { 7356 + "self": { 7357 + "href": "/api/measurements/71bfded1-f19a-418e-8f97-0e23b2e63535" 7358 + }, 7359 + "tag": [ 7360 + { 7361 + "href": "/api/tags/full-body" 7362 + } 7363 + ] 7364 + }, 7365 + "id": "71bfded1-f19a-418e-8f97-0e23b2e63535", 7366 + "created": "2016-02-19T05:42:35.061Z", 7367 + "lastChanged": "2018-09-21T09:54:07.687Z", 7368 + "name": { 7369 + "en": "Jumping Jack" 7370 + }, 7371 + "instructions": { 7372 + "en": "Starting with feet close together and arms at the side, slightly bend the knees.||Jump while raising the hands and land with feet slightly outside of shoulder width.||Jump again to return to the starting position.||Repeat for reps." 7373 + }, 7374 + "media": [ 7375 + { 7376 + "url": "https://files.strong.app/users/global/IMGeyipZ0wFPA.jpg", 7377 + "type": "IMAGE", 7378 + "contentType": "image/jpeg" 7379 + }, 7380 + { 7381 + "url": "https://files.strong.app/users/global/THUeyipZ0wFPA%403x.png", 7382 + "type": "THUMBNAIL", 7383 + "contentType": "image/png" 7384 + } 7385 + ], 7386 + "cellTypeConfigs": [ 7387 + { 7388 + "cellType": "REPS", 7389 + "mandatory": true 7390 + }, 7391 + { 7392 + "cellType": "RPE", 7393 + "isExponent": true 7394 + } 7395 + ], 7396 + "isGlobal": true, 7397 + "measurementType": "EXERCISE" 7398 + }, 7399 + { 7400 + "_links": { 7401 + "self": { 7402 + "href": "/api/measurements/2de0ec86-52dd-4b20-bae1-375c412adfa6" 7403 + }, 7404 + "tag": [ 7405 + { 7406 + "href": "/api/tags/legs" 7407 + } 7408 + ] 7409 + }, 7410 + "id": "2de0ec86-52dd-4b20-bae1-375c412adfa6", 7411 + "created": "2016-02-19T05:42:35.056Z", 7412 + "lastChanged": "2017-12-15T07:24:49.355Z", 7413 + "name": { 7414 + "en": "Jump Squat" 7415 + }, 7416 + "instructions": { 7417 + "en": "Starting in a squat position with hands in front to maintain balance.||Pushing from the midfoot, jump into the air while exhaling.||When touching floor absorb impact by returning to the starting position.||Repeat for reps. " 7418 + }, 7419 + "media": [ 7420 + { 7421 + "url": "https://files.strong.app/users/global/VIDvEe5QmOLaC.mp4", 7422 + "type": "VIDEO", 7423 + "contentType": "video/mp4" 7424 + }, 7425 + { 7426 + "url": "https://files.strong.app/users/global/THUvEe5QmOLaC%403x.png", 7427 + "type": "THUMBNAIL", 7428 + "contentType": "image/png" 7429 + } 7430 + ], 7431 + "cellTypeConfigs": [ 7432 + { 7433 + "cellType": "REPS", 7434 + "mandatory": true 7435 + }, 7436 + { 7437 + "cellType": "RPE", 7438 + "isExponent": true 7439 + } 7440 + ], 7441 + "isGlobal": true, 7442 + "measurementType": "EXERCISE" 7443 + }, 7444 + { 7445 + "_links": { 7446 + "self": { 7447 + "href": "/api/measurements/6f3480e3-5172-4499-9bba-a4516698d6b9" 7448 + }, 7449 + "tag": [ 7450 + { 7451 + "href": "/api/tags/cardio" 7452 + } 7453 + ] 7454 + }, 7455 + "id": "6f3480e3-5172-4499-9bba-a4516698d6b9", 7456 + "created": "2016-02-19T05:42:35.049Z", 7457 + "lastChanged": "2017-12-15T07:24:40.457Z", 7458 + "name": { 7459 + "en": "Jump Rope" 7460 + }, 7461 + "instructions": { 7462 + "en": "Grip skipping rope handles loosely with fingers.||Lay rope behind feet. This is the starting position.||Skip by rotating rope over head and under the feet." 7463 + }, 7464 + "media": [ 7465 + { 7466 + "url": "https://files.strong.app/users/global/IMGbHO8blR0Ch.jpg", 7467 + "type": "IMAGE", 7468 + "contentType": "image/jpeg" 7469 + }, 7470 + { 7471 + "url": "https://files.strong.app/users/global/THUbHO8blR0Ch%403x.png", 7472 + "type": "THUMBNAIL", 7473 + "contentType": "image/png" 7474 + } 7475 + ], 7476 + "cellTypeConfigs": [ 7477 + { 7478 + "cellType": "REPS", 7479 + "mandatory": true 7480 + }, 7481 + { 7482 + "cellType": "RPE", 7483 + "isExponent": true 7484 + } 7485 + ], 7486 + "isGlobal": true, 7487 + "measurementType": "EXERCISE" 7488 + }, 7489 + { 7490 + "_links": { 7491 + "self": { 7492 + "href": "/api/measurements/70192f8e-971a-4c67-ab93-ed05932b24e6" 7493 + }, 7494 + "tag": [ 7495 + { 7496 + "href": "/api/tags/legs" 7497 + } 7498 + ] 7499 + }, 7500 + "id": "70192f8e-971a-4c67-ab93-ed05932b24e6", 7501 + "created": "2016-02-19T05:42:35.043Z", 7502 + "lastChanged": "2018-01-02T11:58:01.191Z", 7503 + "name": { 7504 + "en": "Hip Thrust (Bodyweight)" 7505 + }, 7506 + "instructions": { 7507 + "en": "Lie down on the floor or a mat with your hands to the side or over the top of your head, whichever feels more stable.||Place your feet around shoulder width with your knees bent.||Lift your hips off the floor by pushing with your heels. Be sure to keep your back straight at all times.||Hold the top position for a brief moment, then return to starting position.||Repeat for reps." 7508 + }, 7509 + "media": [ 7510 + { 7511 + "url": "https://files.strong.app/users/global/IMGEZPxCSRfQh.jpg", 7512 + "type": "IMAGE", 7513 + "contentType": "image/jpeg" 7514 + }, 7515 + { 7516 + "url": "https://files.strong.app/users/global/THUEZPxCSRfQh%403x.png", 7517 + "type": "THUMBNAIL", 7518 + "contentType": "image/png" 7519 + } 7520 + ], 7521 + "cellTypeConfigs": [ 7522 + { 7523 + "cellType": "REPS", 7524 + "mandatory": true 7525 + }, 7526 + { 7527 + "cellType": "RPE", 7528 + "isExponent": true 7529 + } 7530 + ], 7531 + "isGlobal": true, 7532 + "measurementType": "EXERCISE" 7533 + }, 7534 + { 7535 + "_links": { 7536 + "self": { 7537 + "href": "/api/measurements/29b69647-23ec-4da7-9299-89b8eb1fbf68" 7538 + }, 7539 + "tag": [ 7540 + { 7541 + "href": "/api/tags/legs" 7542 + } 7543 + ] 7544 + }, 7545 + "id": "29b69647-23ec-4da7-9299-89b8eb1fbf68", 7546 + "created": "2016-02-19T05:42:35.038Z", 7547 + "lastChanged": "2018-09-21T09:40:54.206Z", 7548 + "name": { 7549 + "en": "High Knee Skips" 7550 + }, 7551 + "instructions": { 7552 + "en": "Begin with feet shoulder width apart and knees slightly bent.||Simultaneously bring the left arm and right knee upward.||Alternate sides and repeat for reps." 7553 + }, 7554 + "media": [ 7555 + { 7556 + "url": "https://files.strong.app/users/global/IMGBaARGston2.jpg", 7557 + "type": "IMAGE", 7558 + "contentType": "image/jpeg" 7559 + }, 7560 + { 7561 + "url": "https://files.strong.app/users/global/THUBaARGston2%403x.png", 7562 + "type": "THUMBNAIL", 7563 + "contentType": "image/png" 7564 + } 7565 + ], 7566 + "cellTypeConfigs": [ 7567 + { 7568 + "cellType": "REPS", 7569 + "mandatory": true 7570 + }, 7571 + { 7572 + "cellType": "RPE", 7573 + "isExponent": true 7574 + } 7575 + ], 7576 + "isGlobal": true, 7577 + "measurementType": "EXERCISE" 7578 + }, 7579 + { 7580 + "_links": { 7581 + "self": { 7582 + "href": "/api/measurements/c331ae12-b44a-426f-ac97-4c5169c0a74f" 7583 + }, 7584 + "tag": [ 7585 + { 7586 + "href": "/api/tags/core" 7587 + } 7588 + ] 7589 + }, 7590 + "id": "c331ae12-b44a-426f-ac97-4c5169c0a74f", 7591 + "created": "2016-02-19T05:42:35.031Z", 7592 + "lastChanged": "2018-09-21T10:15:48.89Z", 7593 + "name": { 7594 + "en": "Flat Leg Raise" 7595 + }, 7596 + "instructions": { 7597 + "en": "Lie on a mat with legs extended in front, place hands under your glutes.||Exhale, keeping the core tight as you lift legs until they are perpendicular with the floor.||Lower legs back to the mat without touching the floor, keeping the core braced.||Repeat for reps." 7598 + }, 7599 + "media": [ 7600 + { 7601 + "url": "https://files.strong.app/users/global/VIDhp9cgKc7nt.mp4", 7602 + "type": "VIDEO", 7603 + "contentType": "video/mp4" 7604 + }, 7605 + { 7606 + "url": "https://files.strong.app/users/global/THUhp9cgKc7nt%403x.png", 7607 + "type": "THUMBNAIL", 7608 + "contentType": "image/png" 7609 + } 7610 + ], 7611 + "cellTypeConfigs": [ 7612 + { 7613 + "cellType": "REPS", 7614 + "mandatory": true 7615 + }, 7616 + { 7617 + "cellType": "RPE", 7618 + "isExponent": true 7619 + } 7620 + ], 7621 + "isGlobal": true, 7622 + "measurementType": "EXERCISE" 7623 + }, 7624 + { 7625 + "_links": { 7626 + "self": { 7627 + "href": "/api/measurements/61e7712d-f60f-47d3-921a-f02d5b72b808" 7628 + }, 7629 + "tag": [ 7630 + { 7631 + "href": "/api/tags/core" 7632 + } 7633 + ] 7634 + }, 7635 + "id": "61e7712d-f60f-47d3-921a-f02d5b72b808", 7636 + "created": "2016-02-19T05:42:35.025Z", 7637 + "lastChanged": "2018-09-20T06:19:15.057Z", 7638 + "name": { 7639 + "en": "Crunch (Stability Ball)" 7640 + }, 7641 + "instructions": { 7642 + "en": "Lay with the lower back supported against the stability ball.||Keep knees shoulder width apart and fold arms across the body.||Flex the abs and raise the torso.||Pause at the top and return to the starting position.||Repeat for reps." 7643 + }, 7644 + "media": [ 7645 + { 7646 + "url": "https://files.strong.app/users/global/VIDw29tpxQe4w.mp4", 7647 + "type": "VIDEO", 7648 + "contentType": "video/mp4" 7649 + }, 7650 + { 7651 + "url": "https://files.strong.app/users/global/THUw29tpxQe4w%403x.png", 7652 + "type": "THUMBNAIL", 7653 + "contentType": "image/png" 7654 + } 7655 + ], 7656 + "cellTypeConfigs": [ 7657 + { 7658 + "cellType": "REPS", 7659 + "mandatory": true 7660 + }, 7661 + { 7662 + "cellType": "RPE", 7663 + "isExponent": true 7664 + } 7665 + ], 7666 + "isGlobal": true, 7667 + "measurementType": "EXERCISE" 7668 + }, 7669 + { 7670 + "_links": { 7671 + "self": { 7672 + "href": "/api/measurements/820ee004-4443-49d3-aeeb-50b0a53298dc" 7673 + }, 7674 + "tag": [ 7675 + { 7676 + "href": "/api/tags/back" 7677 + } 7678 + ] 7679 + }, 7680 + "id": "820ee004-4443-49d3-aeeb-50b0a53298dc", 7681 + "created": "2016-02-19T05:42:35.019Z", 7682 + "lastChanged": "2017-12-15T07:28:06.446Z", 7683 + "name": { 7684 + "en": "Pull Up (Assisted)" 7685 + }, 7686 + "instructions": { 7687 + "en": "Holding the pull up bar in a pronated grip, place knees on the support pad.||Keeping the shoulders tucked back, lift the body by contracting the lats and driving elbows downward.||Hold at the top and lower slowly to the starting position.||Repeat for reps." 7688 + }, 7689 + "media": [ 7690 + { 7691 + "url": "https://files.strong.app/users/global/IMGocwIUbLzM0.jpg", 7692 + "type": "IMAGE", 7693 + "contentType": "image/jpeg" 7694 + }, 7695 + { 7696 + "url": "https://files.strong.app/users/global/THUocwIUbLzM0%403x.png", 7697 + "type": "THUMBNAIL", 7698 + "contentType": "image/png" 7699 + } 7700 + ], 7701 + "cellTypeConfigs": [ 7702 + { 7703 + "cellType": "ASSISTED_BODYWEIGHT" 7704 + }, 7705 + { 7706 + "cellType": "REPS", 7707 + "mandatory": true 7708 + }, 7709 + { 7710 + "cellType": "RPE", 7711 + "isExponent": true 7712 + } 7713 + ], 7714 + "isGlobal": true, 7715 + "measurementType": "EXERCISE" 7716 + }, 7717 + { 7718 + "_links": { 7719 + "self": { 7720 + "href": "/api/measurements/ac66c13f-2764-4a74-b4ad-01223fd0a9f5" 7721 + }, 7722 + "tag": [ 7723 + { 7724 + "href": "/api/tags/back" 7725 + } 7726 + ] 7727 + }, 7728 + "id": "ac66c13f-2764-4a74-b4ad-01223fd0a9f5", 7729 + "created": "2016-02-19T05:42:35.014Z", 7730 + "lastChanged": "2017-12-15T07:14:47.384Z", 7731 + "name": { 7732 + "en": "Chin Up (Assisted)" 7733 + }, 7734 + "instructions": { 7735 + "en": "Set up at the assisted pull up machine.||Grip the bar with an underhand grip about shoulder width apart.||Contract your lats and biceps to pull yourself upwards. You should drive your elbows down and end the rep with your chin above the bar.||Repeat for reps." 7736 + }, 7737 + "media": [ 7738 + { 7739 + "url": "https://files.strong.app/users/global/IMGlTLQ6Pvphn.jpg", 7740 + "type": "IMAGE", 7741 + "contentType": "image/jpeg" 7742 + }, 7743 + { 7744 + "url": "https://files.strong.app/users/global/THUlTLQ6Pvphn%403x.png", 7745 + "type": "THUMBNAIL", 7746 + "contentType": "image/png" 7747 + } 7748 + ], 7749 + "cellTypeConfigs": [ 7750 + { 7751 + "cellType": "ASSISTED_BODYWEIGHT" 7752 + }, 7753 + { 7754 + "cellType": "REPS", 7755 + "mandatory": true 7756 + }, 7757 + { 7758 + "cellType": "RPE", 7759 + "isExponent": true 7760 + } 7761 + ], 7762 + "isGlobal": true, 7763 + "measurementType": "EXERCISE" 7764 + }, 7765 + { 7766 + "_links": { 7767 + "self": { 7768 + "href": "/api/measurements/78e4a335-96b9-4492-a0f0-0ea26a6f69ca" 7769 + }, 7770 + "tag": [ 7771 + { 7772 + "href": "/api/tags/chest" 7773 + } 7774 + ] 7775 + }, 7776 + "id": "78e4a335-96b9-4492-a0f0-0ea26a6f69ca", 7777 + "created": "2016-02-19T05:42:35.008Z", 7778 + "lastChanged": "2017-12-15T07:14:33.019Z", 7779 + "name": { 7780 + "en": "Chest Dip (Assisted)" 7781 + }, 7782 + "instructions": { 7783 + "en": "Holding body from arms extended above the chest dip bars with knees placed on the assistance pad. This is your starting position.||Slowly lower your body with the torso leaning forward and elbows slightly flared out until you feel a stretch in the chest.||From this position squeeze the chest and bring the body back to the starting position as you breath out.||Repeat for reps." 7784 + }, 7785 + "media": [ 7786 + { 7787 + "url": "https://files.strong.app/users/global/VID6AELYsmQWq.mp4", 7788 + "type": "VIDEO", 7789 + "contentType": "video/mp4" 7790 + }, 7791 + { 7792 + "url": "https://files.strong.app/users/global/THU6AELYsmQWq%403x.png", 7793 + "type": "THUMBNAIL", 7794 + "contentType": "image/png" 7795 + } 7796 + ], 7797 + "cellTypeConfigs": [ 7798 + { 7799 + "cellType": "ASSISTED_BODYWEIGHT" 7800 + }, 7801 + { 7802 + "cellType": "REPS", 7803 + "mandatory": true 7804 + }, 7805 + { 7806 + "cellType": "RPE", 7807 + "isExponent": true 7808 + } 7809 + ], 7810 + "isGlobal": true, 7811 + "measurementType": "EXERCISE" 7812 + }, 7813 + { 7814 + "_links": { 7815 + "self": { 7816 + "href": "/api/measurements/607432af-4556-41ed-8746-a2e6c60e76a1" 7817 + }, 7818 + "tag": [ 7819 + { 7820 + "href": "/api/tags/arms" 7821 + } 7822 + ] 7823 + }, 7824 + "id": "607432af-4556-41ed-8746-a2e6c60e76a1", 7825 + "created": "2016-02-19T05:42:35.002Z", 7826 + "lastChanged": "2018-09-21T09:37:31.632Z", 7827 + "name": { 7828 + "en": "Triceps Dip" 7829 + }, 7830 + "instructions": { 7831 + "en": "Mount the dip bars with your arms straight and your shoulders directly above your hands. This is your starting position.||Slowly lower your body with the torso leaning forward and elbows slightly flared out until you feel a stretch in the shoulders. Be sure to keep your hips hanging straight down.||From this position, push your body back up to the starting position as you breath out.||Repeat for reps." 7832 + }, 7833 + "media": [ 7834 + { 7835 + "url": "https://files.strong.app/users/global/VIDWUIlFXrQC2.mp4", 7836 + "type": "VIDEO", 7837 + "contentType": "video/mp4" 7838 + }, 7839 + { 7840 + "url": "https://files.strong.app/users/global/THUWUIlFXrQC2%403x.png", 7841 + "type": "THUMBNAIL", 7842 + "contentType": "image/png" 7843 + } 7844 + ], 7845 + "cellTypeConfigs": [ 7846 + { 7847 + "cellType": "WEIGHTED_BODYWEIGHT" 7848 + }, 7849 + { 7850 + "cellType": "REPS", 7851 + "mandatory": true 7852 + }, 7853 + { 7854 + "cellType": "RPE", 7855 + "isExponent": true 7856 + } 7857 + ], 7858 + "isGlobal": true, 7859 + "measurementType": "EXERCISE" 7860 + }, 7861 + { 7862 + "_links": { 7863 + "self": { 7864 + "href": "/api/measurements/752349b3-8813-48d2-b315-6ef4d9b4f3cb" 7865 + }, 7866 + "tag": [ 7867 + { 7868 + "href": "/api/tags/legs" 7869 + } 7870 + ] 7871 + }, 7872 + "id": "752349b3-8813-48d2-b315-6ef4d9b4f3cb", 7873 + "created": "2016-02-19T05:42:34.996Z", 7874 + "lastChanged": "2017-12-15T07:31:15.989Z", 7875 + "name": { 7876 + "en": "Squat (Bodyweight)" 7877 + }, 7878 + "instructions": { 7879 + "en": "Standing with feed shoulder width apart, sit back with the hips while flexing hips and keeping knees pointed slightly outward.||Continue down to the bottom position, while making sure you are maintaining a straight back and keeping weight evenly distributed throughout the foot.||Exhale as you push upward from the bottom position, pushing the knees outward.||Repeat for reps." 7880 + }, 7881 + "media": [ 7882 + { 7883 + "url": "https://files.strong.app/users/global/IMGbsnljXHBgr.jpg", 7884 + "type": "IMAGE", 7885 + "contentType": "image/jpeg" 7886 + }, 7887 + { 7888 + "url": "https://files.strong.app/users/global/THUbsnljXHBgr%403x.png", 7889 + "type": "THUMBNAIL", 7890 + "contentType": "image/png" 7891 + } 7892 + ], 7893 + "cellTypeConfigs": [ 7894 + { 7895 + "cellType": "WEIGHTED_BODYWEIGHT" 7896 + }, 7897 + { 7898 + "cellType": "REPS", 7899 + "mandatory": true 7900 + }, 7901 + { 7902 + "cellType": "RPE", 7903 + "isExponent": true 7904 + } 7905 + ], 7906 + "isGlobal": true, 7907 + "measurementType": "EXERCISE" 7908 + }, 7909 + { 7910 + "_links": { 7911 + "self": { 7912 + "href": "/api/measurements/784d5217-cc1a-4267-bb18-4bf611903c49" 7913 + }, 7914 + "tag": [ 7915 + { 7916 + "href": "/api/tags/core" 7917 + } 7918 + ] 7919 + }, 7920 + "id": "784d5217-cc1a-4267-bb18-4bf611903c49", 7921 + "created": "2016-02-19T05:42:34.99Z", 7922 + "lastChanged": "2017-12-15T07:30:49.778Z", 7923 + "name": { 7924 + "en": "Sit Up" 7925 + }, 7926 + "instructions": { 7927 + "en": "Secure feet under some weight with knees bent. Place hands at the side of the head with the back on the floor.||Contracting the abs, raise the torso until it makes a V with the thighs.||Return to the starting position while inhaling.||Repeat for reps." 7928 + }, 7929 + "media": [ 7930 + { 7931 + "url": "https://files.strong.app/users/global/VIDKLg1oZClfw.mp4", 7932 + "type": "VIDEO", 7933 + "contentType": "video/mp4" 7934 + }, 7935 + { 7936 + "url": "https://files.strong.app/users/global/THUKLg1oZClfw%403x.png", 7937 + "type": "THUMBNAIL", 7938 + "contentType": "image/png" 7939 + } 7940 + ], 7941 + "cellTypeConfigs": [ 7942 + { 7943 + "cellType": "WEIGHTED_BODYWEIGHT" 7944 + }, 7945 + { 7946 + "cellType": "REPS", 7947 + "mandatory": true 7948 + }, 7949 + { 7950 + "cellType": "RPE", 7951 + "isExponent": true 7952 + } 7953 + ], 7954 + "isGlobal": true, 7955 + "measurementType": "EXERCISE" 7956 + }, 7957 + { 7958 + "_links": { 7959 + "self": { 7960 + "href": "/api/measurements/910e476e-c32d-44a8-b0a5-68ee05d72011" 7961 + }, 7962 + "tag": [ 7963 + { 7964 + "href": "/api/tags/core" 7965 + } 7966 + ] 7967 + }, 7968 + "id": "910e476e-c32d-44a8-b0a5-68ee05d72011", 7969 + "created": "2016-02-19T05:42:34.982Z", 7970 + "lastChanged": "2017-12-15T07:28:23.198Z", 7971 + "name": { 7972 + "en": "Reverse Crunch" 7973 + }, 7974 + "instructions": { 7975 + "en": "Lying on the floor, extend legs so the thighs are perpendicular to the floor.||Raise the hips from the floor and extend heels upwards.||Return to the starting position slowly.||Repeat for reps." 7976 + }, 7977 + "media": [ 7978 + { 7979 + "url": "https://files.strong.app/users/global/VIDUUCuOC4arz.mp4", 7980 + "type": "VIDEO", 7981 + "contentType": "video/mp4" 7982 + }, 7983 + { 7984 + "url": "https://files.strong.app/users/global/THUUUCuOC4arz%403x.png", 7985 + "type": "THUMBNAIL", 7986 + "contentType": "image/png" 7987 + } 7988 + ], 7989 + "cellTypeConfigs": [ 7990 + { 7991 + "cellType": "WEIGHTED_BODYWEIGHT" 7992 + }, 7993 + { 7994 + "cellType": "REPS", 7995 + "mandatory": true 7996 + }, 7997 + { 7998 + "cellType": "RPE", 7999 + "isExponent": true 8000 + } 8001 + ], 8002 + "isGlobal": true, 8003 + "measurementType": "EXERCISE" 8004 + }, 8005 + { 8006 + "_links": { 8007 + "self": { 8008 + "href": "/api/measurements/f0f86563-85fc-49a8-9ec7-f95ddd318ab4" 8009 + }, 8010 + "tag": [ 8011 + { 8012 + "href": "/api/tags/chest" 8013 + } 8014 + ] 8015 + }, 8016 + "id": "f0f86563-85fc-49a8-9ec7-f95ddd318ab4", 8017 + "created": "2016-02-19T05:42:34.977Z", 8018 + "lastChanged": "2017-12-15T07:28:18.457Z", 8019 + "name": { 8020 + "en": "Push Up" 8021 + }, 8022 + "instructions": { 8023 + "en": "Lie prone on floor with hands slightly wider than shoulder width.||Raise body up off floor by extending arms with body straight.||Keeping body straight, lower body to floor by bending arms. Push body up until arms are extended.||Repeat for reps." 8024 + }, 8025 + "media": [ 8026 + { 8027 + "url": "https://files.strong.app/users/global/VIDLDa0I05c38.mp4", 8028 + "type": "VIDEO", 8029 + "contentType": "video/mp4" 8030 + }, 8031 + { 8032 + "url": "https://files.strong.app/users/global/THULDa0I05c38%403x.png", 8033 + "type": "THUMBNAIL", 8034 + "contentType": "image/png" 8035 + } 8036 + ], 8037 + "cellTypeConfigs": [ 8038 + { 8039 + "cellType": "WEIGHTED_BODYWEIGHT" 8040 + }, 8041 + { 8042 + "cellType": "REPS", 8043 + "mandatory": true 8044 + }, 8045 + { 8046 + "cellType": "RPE", 8047 + "isExponent": true 8048 + } 8049 + ], 8050 + "isGlobal": true, 8051 + "measurementType": "EXERCISE" 8052 + }, 8053 + { 8054 + "_links": { 8055 + "self": { 8056 + "href": "/api/measurements/adb75e5a-c873-4f57-bdf0-0043710ba90d" 8057 + }, 8058 + "tag": [ 8059 + { 8060 + "href": "/api/tags/back" 8061 + } 8062 + ] 8063 + }, 8064 + "id": "adb75e5a-c873-4f57-bdf0-0043710ba90d", 8065 + "created": "2016-02-19T05:42:34.971Z", 8066 + "lastChanged": "2017-12-15T07:28:01.874Z", 8067 + "name": { 8068 + "en": "Pull Up" 8069 + }, 8070 + "instructions": { 8071 + "en": "Hold the pull up bar with a neutral grip with arms fully extended.||Retract scapula and pull upward by bringing chest to the bar.||Pause at the top and squeeze the back before lowering slowly to the starting position.||Repeat for reps." 8072 + }, 8073 + "media": [ 8074 + { 8075 + "url": "https://files.strong.app/users/global/IMGh5Wv2QILsj.jpg", 8076 + "type": "IMAGE", 8077 + "contentType": "image/jpeg" 8078 + }, 8079 + { 8080 + "url": "https://files.strong.app/users/global/THUh5Wv2QILsj%403x.png", 8081 + "type": "THUMBNAIL", 8082 + "contentType": "image/png" 8083 + } 8084 + ], 8085 + "cellTypeConfigs": [ 8086 + { 8087 + "cellType": "WEIGHTED_BODYWEIGHT" 8088 + }, 8089 + { 8090 + "cellType": "REPS", 8091 + "mandatory": true 8092 + }, 8093 + { 8094 + "cellType": "RPE", 8095 + "isExponent": true 8096 + } 8097 + ], 8098 + "isGlobal": true, 8099 + "measurementType": "EXERCISE" 8100 + }, 8101 + { 8102 + "_links": { 8103 + "self": { 8104 + "href": "/api/measurements/1ea74f7f-6828-4a9e-8bbb-0c17523ec40a" 8105 + }, 8106 + "tag": [ 8107 + { 8108 + "href": "/api/tags/core" 8109 + } 8110 + ] 8111 + }, 8112 + "id": "1ea74f7f-6828-4a9e-8bbb-0c17523ec40a", 8113 + "created": "2016-02-19T05:42:34.964Z", 8114 + "lastChanged": "2018-09-21T10:00:56.967Z", 8115 + "name": { 8116 + "en": "Jackknife Sit Up" 8117 + }, 8118 + "instructions": { 8119 + "en": "Lie down on a mat with your hands on the side of your torso and feet on the floor. To make the exercise more difficult, hold a dumbbell or medicine ball above your head.||Raise your knees and your torso simultaneously until hips are flexed. Feel free to slightly bend your knees if you have flexibility issues.||Return to starting position.||Repeat for reps." 8120 + }, 8121 + "media": [ 8122 + { 8123 + "url": "https://files.strong.app/users/global/IMGOAF9l0FdWh.jpg", 8124 + "type": "IMAGE", 8125 + "contentType": "image/jpeg" 8126 + }, 8127 + { 8128 + "url": "https://files.strong.app/users/global/THUOAF9l0FdWh%403x.png", 8129 + "type": "THUMBNAIL", 8130 + "contentType": "image/png" 8131 + } 8132 + ], 8133 + "cellTypeConfigs": [ 8134 + { 8135 + "cellType": "WEIGHTED_BODYWEIGHT" 8136 + }, 8137 + { 8138 + "cellType": "REPS", 8139 + "mandatory": true 8140 + }, 8141 + { 8142 + "cellType": "RPE", 8143 + "isExponent": true 8144 + } 8145 + ], 8146 + "isGlobal": true, 8147 + "measurementType": "EXERCISE" 8148 + }, 8149 + { 8150 + "_links": { 8151 + "self": { 8152 + "href": "/api/measurements/8eba64e0-5e50-4f85-ad66-7faeb87e5bb0" 8153 + }, 8154 + "tag": [ 8155 + { 8156 + "href": "/api/tags/core" 8157 + } 8158 + ] 8159 + }, 8160 + "id": "8eba64e0-5e50-4f85-ad66-7faeb87e5bb0", 8161 + "created": "2016-02-19T05:42:34.958Z", 8162 + "lastChanged": "2017-12-15T07:17:35.27Z", 8163 + "name": { 8164 + "en": "Hanging Leg Raise" 8165 + }, 8166 + "instructions": { 8167 + "en": "Hang from a bar with arms extended and legs straight down.||Contract abs and raise legs until torso creates a 90 degree angle with the thighs.||Hold position while keeping core tight, then return to the starting position.||Repeat for reps." 8168 + }, 8169 + "media": [ 8170 + { 8171 + "url": "https://files.strong.app/users/global/VID6NQgjnb0vI.mp4", 8172 + "type": "VIDEO", 8173 + "contentType": "video/mp4" 8174 + }, 8175 + { 8176 + "url": "https://files.strong.app/users/global/THU6NQgjnb0vI%403x.png", 8177 + "type": "THUMBNAIL", 8178 + "contentType": "image/png" 8179 + } 8180 + ], 8181 + "cellTypeConfigs": [ 8182 + { 8183 + "cellType": "WEIGHTED_BODYWEIGHT" 8184 + }, 8185 + { 8186 + "cellType": "REPS", 8187 + "mandatory": true 8188 + }, 8189 + { 8190 + "cellType": "RPE", 8191 + "isExponent": true 8192 + } 8193 + ], 8194 + "isGlobal": true, 8195 + "measurementType": "EXERCISE" 8196 + }, 8197 + { 8198 + "_links": { 8199 + "self": { 8200 + "href": "/api/measurements/b17772de-f3ec-471b-8485-08ecffe4a595" 8201 + }, 8202 + "tag": [ 8203 + { 8204 + "href": "/api/tags/core" 8205 + } 8206 + ] 8207 + }, 8208 + "id": "b17772de-f3ec-471b-8485-08ecffe4a595", 8209 + "created": "2016-02-19T05:42:34.953Z", 8210 + "lastChanged": "2017-12-15T07:15:58.468Z", 8211 + "name": { 8212 + "en": "Decline Crunch" 8213 + }, 8214 + "instructions": { 8215 + "en": "Lie on a decline bench, securing legs on the end of the bench. Place fingers at the side of the head with shoulders lifted slightly above the bench.||Contract the abdominal muscles and raise the shoulders off the bench about 4 to 6 inches.||Hold the position at the top and slowly lower back to the starting position while breathing out.||Repeat for reps." 8216 + }, 8217 + "media": [ 8218 + { 8219 + "url": "https://files.strong.app/users/global/VIDkHu0Bgp515.mp4", 8220 + "type": "VIDEO", 8221 + "contentType": "video/mp4" 8222 + }, 8223 + { 8224 + "url": "https://files.strong.app/users/global/THUkHu0Bgp515%403x.png", 8225 + "type": "THUMBNAIL", 8226 + "contentType": "image/png" 8227 + } 8228 + ], 8229 + "cellTypeConfigs": [ 8230 + { 8231 + "cellType": "WEIGHTED_BODYWEIGHT" 8232 + }, 8233 + { 8234 + "cellType": "REPS", 8235 + "mandatory": true 8236 + }, 8237 + { 8238 + "cellType": "RPE", 8239 + "isExponent": true 8240 + } 8241 + ], 8242 + "isGlobal": true, 8243 + "measurementType": "EXERCISE" 8244 + }, 8245 + { 8246 + "_links": { 8247 + "self": { 8248 + "href": "/api/measurements/2dc47f38-396c-492a-94e2-f4aa9d012308" 8249 + }, 8250 + "tag": [ 8251 + { 8252 + "href": "/api/tags/core" 8253 + } 8254 + ] 8255 + }, 8256 + "id": "2dc47f38-396c-492a-94e2-f4aa9d012308", 8257 + "created": "2016-02-19T05:42:34.948Z", 8258 + "lastChanged": "2017-12-15T07:15:33.936Z", 8259 + "name": { 8260 + "en": "Crunch" 8261 + }, 8262 + "instructions": { 8263 + "en": "Lie flat on a mat with knees bent at a 90 degree angle. Place fingers at the side of the head with shoulders lifted slightly above the floor.||Contract the abdominal muscles and raise the shoulders off the floor about 4 to 6 inches.||Hold the position at the top and slowly lower back to the starting position while breathing out.||Repeat for reps." 8264 + }, 8265 + "media": [ 8266 + { 8267 + "url": "https://files.strong.app/users/global/VIDSnsuHH0yLm.mp4", 8268 + "type": "VIDEO", 8269 + "contentType": "video/mp4" 8270 + }, 8271 + { 8272 + "url": "https://files.strong.app/users/global/THUSnsuHH0yLm%403x.png", 8273 + "type": "THUMBNAIL", 8274 + "contentType": "image/png" 8275 + } 8276 + ], 8277 + "cellTypeConfigs": [ 8278 + { 8279 + "cellType": "WEIGHTED_BODYWEIGHT" 8280 + }, 8281 + { 8282 + "cellType": "REPS", 8283 + "mandatory": true 8284 + }, 8285 + { 8286 + "cellType": "RPE", 8287 + "isExponent": true 8288 + } 8289 + ], 8290 + "isGlobal": true, 8291 + "measurementType": "EXERCISE" 8292 + }, 8293 + { 8294 + "_links": { 8295 + "self": { 8296 + "href": "/api/measurements/52141694-cabc-4776-91c5-503b3ef6d0ff" 8297 + }, 8298 + "tag": [ 8299 + { 8300 + "href": "/api/tags/back" 8301 + } 8302 + ] 8303 + }, 8304 + "id": "52141694-cabc-4776-91c5-503b3ef6d0ff", 8305 + "created": "2016-02-19T05:42:34.941Z", 8306 + "lastChanged": "2017-12-15T07:14:40.476Z", 8307 + "name": { 8308 + "en": "Chin Up" 8309 + }, 8310 + "instructions": { 8311 + "en": "Place hands on the bar with palms facing yourself and a grip slightly within shoulder width.||Retract the shoulders and tuck them down and keep the core tight and back slightly arched.||Breathing out, pull the torso upward until the head is above the bar keeping elbows against the side of the body.||Lower back to the starting position while breathing in.||Repeat for reps." 8312 + }, 8313 + "media": [ 8314 + { 8315 + "url": "https://files.strong.app/users/global/VID33NT7HhnMe.mp4", 8316 + "type": "VIDEO", 8317 + "contentType": "video/mp4" 8318 + }, 8319 + { 8320 + "url": "https://files.strong.app/users/global/THU33NT7HhnMe%403x.png", 8321 + "type": "THUMBNAIL", 8322 + "contentType": "image/png" 8323 + } 8324 + ], 8325 + "cellTypeConfigs": [ 8326 + { 8327 + "cellType": "WEIGHTED_BODYWEIGHT" 8328 + }, 8329 + { 8330 + "cellType": "REPS", 8331 + "mandatory": true 8332 + }, 8333 + { 8334 + "cellType": "RPE", 8335 + "isExponent": true 8336 + } 8337 + ], 8338 + "isGlobal": true, 8339 + "measurementType": "EXERCISE" 8340 + }, 8341 + { 8342 + "_links": { 8343 + "self": { 8344 + "href": "/api/measurements/d340b2a7-9a2a-4130-b7bc-8903847ed565" 8345 + }, 8346 + "tag": [ 8347 + { 8348 + "href": "/api/tags/chest" 8349 + } 8350 + ] 8351 + }, 8352 + "id": "d340b2a7-9a2a-4130-b7bc-8903847ed565", 8353 + "created": "2016-02-19T05:42:34.935Z", 8354 + "lastChanged": "2017-12-15T07:14:23.633Z", 8355 + "name": { 8356 + "en": "Chest Dip" 8357 + }, 8358 + "instructions": { 8359 + "en": "Holding body from arms extended above the chest dip bars. This is your starting position.||Slowly lower your body with the torso leaning forward and elbows slightly flared out until you feel a stretch in the chest.||From this position squeeze the chest and bring the body back to the starting position as you breath out.||Repeat for reps." 8360 + }, 8361 + "media": [ 8362 + { 8363 + "url": "https://files.strong.app/users/global/VIDBFzsAmVPG3.mp4", 8364 + "type": "VIDEO", 8365 + "contentType": "video/mp4" 8366 + }, 8367 + { 8368 + "url": "https://files.strong.app/users/global/THUBFzsAmVPG3%403x.png", 8369 + "type": "THUMBNAIL", 8370 + "contentType": "image/png" 8371 + } 8372 + ], 8373 + "cellTypeConfigs": [ 8374 + { 8375 + "cellType": "WEIGHTED_BODYWEIGHT" 8376 + }, 8377 + { 8378 + "cellType": "REPS", 8379 + "mandatory": true 8380 + }, 8381 + { 8382 + "cellType": "RPE", 8383 + "isExponent": true 8384 + } 8385 + ], 8386 + "isGlobal": true, 8387 + "measurementType": "EXERCISE" 8388 + }, 8389 + { 8390 + "_links": { 8391 + "self": { 8392 + "href": "/api/measurements/37388e32-6714-4e27-8dcf-50d4b6ce6292" 8393 + }, 8394 + "tag": [ 8395 + { 8396 + "href": "/api/tags/core" 8397 + } 8398 + ] 8399 + }, 8400 + "id": "37388e32-6714-4e27-8dcf-50d4b6ce6292", 8401 + "created": "2016-02-19T05:42:34.929Z", 8402 + "lastChanged": "2017-12-15T07:08:51.035Z", 8403 + "name": { 8404 + "en": "Bicycle Crunch" 8405 + }, 8406 + "instructions": { 8407 + "en": "Lie on a mat with hands behind the head and lift shoulders off the ground.||Alternating between sides, touch the end of your left elbow to your right knee as you twist your torso and bring the knee to the upper chest. During this movement simultaneously straighten the opposite leg.||Keep core tight during the movement and alternate the right arm and left knee.||Repeat for reps." 8408 + }, 8409 + "media": [ 8410 + { 8411 + "url": "https://files.strong.app/users/global/IMGZRsMR1eUlC.jpg", 8412 + "type": "IMAGE", 8413 + "contentType": "image/jpeg" 8414 + }, 8415 + { 8416 + "url": "https://files.strong.app/users/global/THUZRsMR1eUlC%403x.png", 8417 + "type": "THUMBNAIL", 8418 + "contentType": "image/png" 8419 + } 8420 + ], 8421 + "cellTypeConfigs": [ 8422 + { 8423 + "cellType": "WEIGHTED_BODYWEIGHT" 8424 + }, 8425 + { 8426 + "cellType": "REPS", 8427 + "mandatory": true 8428 + }, 8429 + { 8430 + "cellType": "RPE", 8431 + "isExponent": true 8432 + } 8433 + ], 8434 + "isGlobal": true, 8435 + "measurementType": "EXERCISE" 8436 + }, 8437 + { 8438 + "_links": { 8439 + "self": { 8440 + "href": "/api/measurements/b8bd2e32-2133-4d66-866f-4b4239be2999" 8441 + }, 8442 + "tag": [ 8443 + { 8444 + "href": "/api/tags/back" 8445 + } 8446 + ] 8447 + }, 8448 + "id": "b8bd2e32-2133-4d66-866f-4b4239be2999", 8449 + "created": "2016-02-19T05:42:34.923Z", 8450 + "lastChanged": "2018-01-02T11:42:19.065Z", 8451 + "name": { 8452 + "en": "Back Extension" 8453 + }, 8454 + "instructions": { 8455 + "en": "Also known as hyperextensions.||Position your thighs on the padding and lock your heels under the padded brace.||Hold the weight by your chest or behind the neck, whichever feels more comfortable.||Lower your body by bending at the waist while keeping your back straight at all times.||Rise back up until torso is parallel to your legs.||Repeat for reps." 8456 + }, 8457 + "media": [ 8458 + { 8459 + "url": "https://files.strong.app/users/global/VIDzCgyX8Gv1Z.mp4", 8460 + "type": "VIDEO", 8461 + "contentType": "video/mp4" 8462 + }, 8463 + { 8464 + "url": "https://files.strong.app/users/global/THUzCgyX8Gv1Z%403x.png", 8465 + "type": "THUMBNAIL", 8466 + "contentType": "image/png" 8467 + } 8468 + ], 8469 + "cellTypeConfigs": [ 8470 + { 8471 + "cellType": "WEIGHTED_BODYWEIGHT" 8472 + }, 8473 + { 8474 + "cellType": "REPS", 8475 + "mandatory": true 8476 + }, 8477 + { 8478 + "cellType": "RPE", 8479 + "isExponent": true 8480 + } 8481 + ], 8482 + "isGlobal": true, 8483 + "measurementType": "EXERCISE" 8484 + }, 8485 + { 8486 + "_links": { 8487 + "self": { 8488 + "href": "/api/measurements/591439ee-94d1-4997-acb0-e5674e3b2f5c" 8489 + }, 8490 + "tag": [ 8491 + { 8492 + "href": "/api/tags/core" 8493 + } 8494 + ] 8495 + }, 8496 + "id": "591439ee-94d1-4997-acb0-e5674e3b2f5c", 8497 + "created": "2016-02-19T05:42:34.918Z", 8498 + "lastChanged": "2018-11-21T09:55:05.825Z", 8499 + "name": { 8500 + "en": "Ab Wheel" 8501 + }, 8502 + "instructions": { 8503 + "en": "Hold the ab wheel with both hands and kneel on the floor.||Place the ab roller on the floor in front of your knees. This is your starting position.||Slowly roll the wheel forward in a controlled manner, stretching out the torso as far as you can without touching the floor with your body.||Stop when fully stretched and pause for a moment.||Pull yourself back to the starting position by contracting the abs." 8504 + }, 8505 + "media": [ 8506 + { 8507 + "url": "https://files.strong.app/users/global/VIDvYj5XQhhT5.mp4", 8508 + "type": "VIDEO", 8509 + "contentType": "video/mp4" 8510 + }, 8511 + { 8512 + "url": "https://files.strong.app/users/global/THUvYj5XQhhT5%403x.png", 8513 + "type": "THUMBNAIL", 8514 + "contentType": "image/png" 8515 + } 8516 + ], 8517 + "cellTypeConfigs": [ 8518 + { 8519 + "cellType": "WEIGHTED_BODYWEIGHT" 8520 + }, 8521 + { 8522 + "cellType": "REPS", 8523 + "mandatory": true 8524 + }, 8525 + { 8526 + "cellType": "RPE", 8527 + "isExponent": true 8528 + } 8529 + ], 8530 + "isGlobal": true, 8531 + "measurementType": "EXERCISE" 8532 + }, 8533 + { 8534 + "_links": { 8535 + "self": { 8536 + "href": "/api/measurements/75c0cf08-e391-466c-83c5-565d1b278244" 8537 + }, 8538 + "tag": [ 8539 + { 8540 + "href": "/api/tags/core" 8541 + } 8542 + ] 8543 + }, 8544 + "id": "75c0cf08-e391-466c-83c5-565d1b278244", 8545 + "created": "2016-02-19T05:42:34.913Z", 8546 + "lastChanged": "2018-09-21T09:49:09.276Z", 8547 + "name": { 8548 + "en": "Cable Twist" 8549 + }, 8550 + "instructions": { 8551 + "en": "Connect a handle to a cable machine, and set the pulley so the handle is right by your head.||With the pulley on the side of your body, grab the handle with both hands and fingers interlaced.||Position one foot near the pulley with your furthest foot away from the pulley. Both feet should be facing away from the pulley.||Pull the cable diagonally downwards with your arms straight. The pull should be done by rotating your torso and gradually lowering your arms until the handle is around your shoulder.||As the pulley makes its way around your body, gradually bend your knees as it approaches the bottom.||Return to the original position.||Repeat for reps." 8552 + }, 8553 + "media": [ 8554 + { 8555 + "url": "https://files.strong.app/users/global/IMGlhcK0ygXoJ.jpg", 8556 + "type": "IMAGE", 8557 + "contentType": "image/jpeg" 8558 + }, 8559 + { 8560 + "url": "https://files.strong.app/users/global/THUlhcK0ygXoJ%403x.png", 8561 + "type": "THUMBNAIL", 8562 + "contentType": "image/png" 8563 + } 8564 + ], 8565 + "cellTypeConfigs": [ 8566 + { 8567 + "cellType": "OTHER_WEIGHT", 8568 + "mandatory": true 8569 + }, 8570 + { 8571 + "cellType": "REPS", 8572 + "mandatory": true 8573 + }, 8574 + { 8575 + "cellType": "RPE", 8576 + "isExponent": true 8577 + } 8578 + ], 8579 + "isGlobal": true, 8580 + "measurementType": "EXERCISE" 8581 + }, 8582 + { 8583 + "_links": { 8584 + "self": { 8585 + "href": "/api/measurements/f21ec917-6402-4938-8103-128fd49d13aa" 8586 + }, 8587 + "tag": [ 8588 + { 8589 + "href": "/api/tags/back" 8590 + } 8591 + ] 8592 + }, 8593 + "id": "f21ec917-6402-4938-8103-128fd49d13aa", 8594 + "created": "2016-02-19T05:42:34.906Z", 8595 + "lastChanged": "2017-12-15T07:35:04.885Z", 8596 + "name": { 8597 + "en": "T Bar Row" 8598 + }, 8599 + "instructions": { 8600 + "en": "Put weight on one end of a barbell and secure the other end in a non stationary spot.||Grab bar with both hands below the weight.||Break at the hips and bend forward until the torso is parallel with the barbell.||Pull bar upward toward the chest while squeezing the back and holding at the top.||Lower bar slowly towards the starting position.||Repeat for reps." 8601 + }, 8602 + "media": [ 8603 + { 8604 + "url": "https://files.strong.app/users/global/IMG100TqWO3tI.jpg", 8605 + "type": "IMAGE", 8606 + "contentType": "image/jpeg" 8607 + }, 8608 + { 8609 + "url": "https://files.strong.app/users/global/THU100TqWO3tI%403x.png", 8610 + "type": "THUMBNAIL", 8611 + "contentType": "image/png" 8612 + } 8613 + ], 8614 + "cellTypeConfigs": [ 8615 + { 8616 + "cellType": "OTHER_WEIGHT", 8617 + "mandatory": true 8618 + }, 8619 + { 8620 + "cellType": "REPS", 8621 + "mandatory": true 8622 + }, 8623 + { 8624 + "cellType": "RPE", 8625 + "isExponent": true 8626 + } 8627 + ], 8628 + "isGlobal": true, 8629 + "measurementType": "EXERCISE" 8630 + }, 8631 + { 8632 + "_links": { 8633 + "self": { 8634 + "href": "/api/measurements/213bd3ef-1207-4fd8-acdd-cb224a8b42a7" 8635 + }, 8636 + "tag": [ 8637 + { 8638 + "href": "/api/tags/legs" 8639 + } 8640 + ] 8641 + }, 8642 + "id": "213bd3ef-1207-4fd8-acdd-cb224a8b42a7", 8643 + "created": "2016-02-19T05:42:34.901Z", 8644 + "lastChanged": "2017-12-15T07:34:06.209Z", 8645 + "name": { 8646 + "en": "Standing Calf Raise (Machine)" 8647 + }, 8648 + "instructions": { 8649 + "en": "Adjust padding to slightly below the starting position where the balls of the feet are placed on the elevated platform and the heels are fully extended.||Stand upright with the torso erect, knees slightly bent.||Raise heels as you breathe out, contracting calves at the top.||Lower slowly back to the starting position.||Repeat for reps." 8650 + }, 8651 + "media": [ 8652 + { 8653 + "url": "https://files.strong.app/users/global/VIDzlMK4Z3iT2.mp4", 8654 + "type": "VIDEO", 8655 + "contentType": "video/mp4" 8656 + }, 8657 + { 8658 + "url": "https://files.strong.app/users/global/THUzlMK4Z3iT2%403x.png", 8659 + "type": "THUMBNAIL", 8660 + "contentType": "image/png" 8661 + } 8662 + ], 8663 + "cellTypeConfigs": [ 8664 + { 8665 + "cellType": "OTHER_WEIGHT", 8666 + "mandatory": true 8667 + }, 8668 + { 8669 + "cellType": "REPS", 8670 + "mandatory": true 8671 + }, 8672 + { 8673 + "cellType": "RPE", 8674 + "isExponent": true 8675 + } 8676 + ], 8677 + "isGlobal": true, 8678 + "measurementType": "EXERCISE" 8679 + }, 8680 + { 8681 + "_links": { 8682 + "self": { 8683 + "href": "/api/measurements/a61773eb-580a-448f-9b03-90aeb3c7c83d" 8684 + }, 8685 + "tag": [ 8686 + { 8687 + "href": "/api/tags/legs" 8688 + } 8689 + ] 8690 + }, 8691 + "id": "a61773eb-580a-448f-9b03-90aeb3c7c83d", 8692 + "created": "2016-02-19T05:42:34.895Z", 8693 + "lastChanged": "2018-10-25T00:39:44.4Z", 8694 + "name": { 8695 + "en": "Squat (Smith Machine)" 8696 + }, 8697 + "instructions": { 8698 + "en": "Set the starting bar height at slightly below shoulder level and place feet shoulder width apart.||Place bar between traps and upper back and load the bar onto the back.||Flex core, keep back straight, head neutral and break at hips and knees, sitting backwards to lower the bar.||Continue until thighs are parallel or beyond parallel with the floor.||Exhale and drive from heels and middle foot to return to the starting position.||Repeat for reps." 8699 + }, 8700 + "media": [ 8701 + { 8702 + "url": "https://files.strong.app/users/global/VIDufcBWkr5Bg.mp4", 8703 + "type": "VIDEO", 8704 + "contentType": "video/mp4" 8705 + }, 8706 + { 8707 + "url": "https://files.strong.app/users/global/THUufcBWkr5Bg%403x.png", 8708 + "type": "THUMBNAIL", 8709 + "contentType": "image/png" 8710 + } 8711 + ], 8712 + "cellTypeConfigs": [ 8713 + { 8714 + "cellType": "OTHER_WEIGHT", 8715 + "mandatory": true 8716 + }, 8717 + { 8718 + "cellType": "REPS", 8719 + "mandatory": true 8720 + }, 8721 + { 8722 + "cellType": "RPE", 8723 + "isExponent": true 8724 + } 8725 + ], 8726 + "isGlobal": true, 8727 + "measurementType": "EXERCISE" 8728 + }, 8729 + { 8730 + "_links": { 8731 + "self": { 8732 + "href": "/api/measurements/a3f1d57d-da0e-466d-a691-c03695d39418" 8733 + }, 8734 + "tag": [ 8735 + { 8736 + "href": "/api/tags/shoulders" 8737 + } 8738 + ] 8739 + }, 8740 + "id": "a3f1d57d-da0e-466d-a691-c03695d39418", 8741 + "created": "2016-02-19T05:42:34.888Z", 8742 + "lastChanged": "2017-12-15T07:30:20.38Z", 8743 + "name": { 8744 + "en": "Shoulder Press (Machine)" 8745 + }, 8746 + "instructions": { 8747 + "en": "Adjust seat so that the handles are around shoulder height.||Grab the handles with an overhand grip.||Inhale and press the weight upwards until arms are fully extended.||Lower into starting position.||Repeat for reps." 8748 + }, 8749 + "media": [ 8750 + { 8751 + "url": "https://files.strong.app/users/global/VIDZYLas8lazD.mp4", 8752 + "type": "VIDEO", 8753 + "contentType": "video/mp4" 8754 + }, 8755 + { 8756 + "url": "https://files.strong.app/users/global/THUZYLas8lazD%403x.png", 8757 + "type": "THUMBNAIL", 8758 + "contentType": "image/png" 8759 + } 8760 + ], 8761 + "cellTypeConfigs": [ 8762 + { 8763 + "cellType": "OTHER_WEIGHT", 8764 + "mandatory": true 8765 + }, 8766 + { 8767 + "cellType": "REPS", 8768 + "mandatory": true 8769 + }, 8770 + { 8771 + "cellType": "RPE", 8772 + "isExponent": true 8773 + } 8774 + ], 8775 + "isGlobal": true, 8776 + "measurementType": "EXERCISE" 8777 + }, 8778 + { 8779 + "_links": { 8780 + "self": { 8781 + "href": "/api/measurements/143f848f-3a01-40bd-88d1-613c3a88309e" 8782 + }, 8783 + "tag": [ 8784 + { 8785 + "href": "/api/tags/back" 8786 + } 8787 + ] 8788 + }, 8789 + "id": "143f848f-3a01-40bd-88d1-613c3a88309e", 8790 + "created": "2016-02-19T05:42:34.882Z", 8791 + "lastChanged": "2018-09-21T09:45:38.674Z", 8792 + "name": { 8793 + "en": "Seated Row (Cable)" 8794 + }, 8795 + "instructions": { 8796 + "en": "Grip the handle attachment with both hands and sit with chest upright and back straight.||With shoulders retracted, pull the handle towards the mid torso.||Squeeze the back muscles as the handle approaches the torso and hold before returning to the starting position.||Repeat for reps." 8797 + }, 8798 + "media": [ 8799 + { 8800 + "url": "https://files.strong.app/users/global/VIDhnhGpeIPU5.mp4", 8801 + "type": "VIDEO", 8802 + "contentType": "video/mp4" 8803 + }, 8804 + { 8805 + "url": "https://files.strong.app/users/global/THUhnhGpeIPU5%403x.png", 8806 + "type": "THUMBNAIL", 8807 + "contentType": "image/png" 8808 + } 8809 + ], 8810 + "cellTypeConfigs": [ 8811 + { 8812 + "cellType": "OTHER_WEIGHT", 8813 + "mandatory": true 8814 + }, 8815 + { 8816 + "cellType": "REPS", 8817 + "mandatory": true 8818 + }, 8819 + { 8820 + "cellType": "RPE", 8821 + "isExponent": true 8822 + } 8823 + ], 8824 + "isGlobal": true, 8825 + "measurementType": "EXERCISE" 8826 + }, 8827 + { 8828 + "_links": { 8829 + "self": { 8830 + "href": "/api/measurements/a60fd1af-31d7-4235-92cd-57f76d1c39e9" 8831 + }, 8832 + "tag": [ 8833 + { 8834 + "href": "/api/tags/chest" 8835 + } 8836 + ] 8837 + }, 8838 + "id": "a60fd1af-31d7-4235-92cd-57f76d1c39e9", 8839 + "created": "2016-02-19T05:42:34.877Z", 8840 + "lastChanged": "2018-09-21T09:49:32.649Z", 8841 + "name": { 8842 + "en": "Chest Fly" 8843 + }, 8844 + "instructions": { 8845 + "en": "Sitting with the pad against the back, grip the handles of the machine.||Slightly bend the elbows and squeeze the chest to bring the handles together in front of the chest.||Return to the starting position while inhaling.||Repeat for reps." 8846 + }, 8847 + "media": [ 8848 + { 8849 + "url": "https://files.strong.app/users/global/IMGXxhrxlBEsp.jpg", 8850 + "type": "IMAGE", 8851 + "contentType": "image/jpeg" 8852 + }, 8853 + { 8854 + "url": "https://files.strong.app/users/global/THUXxhrxlBEsp%403x.png", 8855 + "type": "THUMBNAIL", 8856 + "contentType": "image/png" 8857 + } 8858 + ], 8859 + "cellTypeConfigs": [ 8860 + { 8861 + "cellType": "OTHER_WEIGHT", 8862 + "mandatory": true 8863 + }, 8864 + { 8865 + "cellType": "REPS", 8866 + "mandatory": true 8867 + }, 8868 + { 8869 + "cellType": "RPE", 8870 + "isExponent": true 8871 + } 8872 + ], 8873 + "isGlobal": true, 8874 + "measurementType": "EXERCISE" 8875 + }, 8876 + { 8877 + "_links": { 8878 + "self": { 8879 + "href": "/api/measurements/7d1df88e-8610-495b-83a3-d68aabbfee8a" 8880 + }, 8881 + "tag": [ 8882 + { 8883 + "href": "/api/tags/legs" 8884 + } 8885 + ] 8886 + }, 8887 + "id": "7d1df88e-8610-495b-83a3-d68aabbfee8a", 8888 + "created": "2016-02-19T05:42:34.872Z", 8889 + "lastChanged": "2018-09-21T10:18:32.974Z", 8890 + "name": { 8891 + "en": "Leg Extension (Machine)" 8892 + }, 8893 + "instructions": { 8894 + "en": "Sit on the machine with pads and back rest is appropriately adjusted with the legs under the pad.||Using the quads, extend the legs as you exhale.||Pause at the top and squeeze the quads and lower slowly back to the starting position.||Repeat for reps." 8895 + }, 8896 + "media": [ 8897 + { 8898 + "url": "https://files.strong.app/users/global/VIDoENANmzmDz.mp4", 8899 + "type": "VIDEO", 8900 + "contentType": "video/mp4" 8901 + }, 8902 + { 8903 + "url": "https://files.strong.app/users/global/THUoENANmzmDz%403x.png", 8904 + "type": "THUMBNAIL", 8905 + "contentType": "image/png" 8906 + } 8907 + ], 8908 + "cellTypeConfigs": [ 8909 + { 8910 + "cellType": "OTHER_WEIGHT", 8911 + "mandatory": true 8912 + }, 8913 + { 8914 + "cellType": "REPS", 8915 + "mandatory": true 8916 + }, 8917 + { 8918 + "cellType": "RPE", 8919 + "isExponent": true 8920 + } 8921 + ], 8922 + "isGlobal": true, 8923 + "measurementType": "EXERCISE" 8924 + }, 8925 + { 8926 + "_links": { 8927 + "self": { 8928 + "href": "/api/measurements/b1c68d18-cdc5-466a-96ea-c233473541dc" 8929 + }, 8930 + "tag": [ 8931 + { 8932 + "href": "/api/tags/back" 8933 + } 8934 + ] 8935 + }, 8936 + "id": "b1c68d18-cdc5-466a-96ea-c233473541dc", 8937 + "created": "2016-02-19T05:42:34.866Z", 8938 + "lastChanged": "2017-12-15T07:25:33.084Z", 8939 + "name": { 8940 + "en": "Lat Pulldown (Single Arm)" 8941 + }, 8942 + "instructions": { 8943 + "en": "Sit on the pull down machine with knee pads adjusted to provide support, preventing your body from being pulled out of position.||Attach a cable handle to the pulldown machine and grip the handle with a pronated grip slightly outside of shoulder width.||As you exhale, pull the handle down until it touches the upper chest.||Pause and squeeze the back muscles.||Slowly bring the handle back to the starting position with the lats fully stretched.||Repeat for reps." 8944 + }, 8945 + "media": [ 8946 + { 8947 + "url": "https://files.strong.app/users/global/IMGhYfjsSriQD.jpg", 8948 + "type": "IMAGE", 8949 + "contentType": "image/jpeg" 8950 + }, 8951 + { 8952 + "url": "https://files.strong.app/users/global/THUhYfjsSriQD%403x.png", 8953 + "type": "THUMBNAIL", 8954 + "contentType": "image/png" 8955 + } 8956 + ], 8957 + "cellTypeConfigs": [ 8958 + { 8959 + "cellType": "OTHER_WEIGHT", 8960 + "mandatory": true 8961 + }, 8962 + { 8963 + "cellType": "REPS", 8964 + "mandatory": true 8965 + }, 8966 + { 8967 + "cellType": "RPE", 8968 + "isExponent": true 8969 + } 8970 + ], 8971 + "isGlobal": true, 8972 + "measurementType": "EXERCISE" 8973 + }, 8974 + { 8975 + "_links": { 8976 + "self": { 8977 + "href": "/api/measurements/b92aa3dd-98e1-4e99-a229-434be54c1ae5" 8978 + }, 8979 + "tag": [ 8980 + { 8981 + "href": "/api/tags/back" 8982 + } 8983 + ] 8984 + }, 8985 + "id": "b92aa3dd-98e1-4e99-a229-434be54c1ae5", 8986 + "created": "2016-02-19T05:42:34.859Z", 8987 + "lastChanged": "2018-09-21T09:54:25.578Z", 8988 + "name": { 8989 + "en": "Lat Pulldown (Cable)" 8990 + }, 8991 + "instructions": { 8992 + "en": "Sit on the pull down machine with knee pads adjusted to provide support, preventing your body from being pulled out of position.||Grip the pull down bar with a pronated grip slightly outside of shoulder width.||As you exhale, pull the bar down until it touches the upper chest.||Pause and squeeze the back muscles.||Slowly bring the bar back to the starting position with the lats fully stretched.||Repeat for reps." 8993 + }, 8994 + "media": [ 8995 + { 8996 + "url": "https://files.strong.app/users/global/VIDDa5swzH5xc.mp4", 8997 + "type": "VIDEO", 8998 + "contentType": "video/mp4" 8999 + }, 9000 + { 9001 + "url": "https://files.strong.app/users/global/THUDa5swzH5xc%403x.png", 9002 + "type": "THUMBNAIL", 9003 + "contentType": "image/png" 9004 + } 9005 + ], 9006 + "cellTypeConfigs": [ 9007 + { 9008 + "cellType": "OTHER_WEIGHT", 9009 + "mandatory": true 9010 + }, 9011 + { 9012 + "cellType": "REPS", 9013 + "mandatory": true 9014 + }, 9015 + { 9016 + "cellType": "RPE", 9017 + "isExponent": true 9018 + } 9019 + ], 9020 + "isGlobal": true, 9021 + "measurementType": "EXERCISE" 9022 + }, 9023 + { 9024 + "_links": { 9025 + "self": { 9026 + "href": "/api/measurements/b292faa1-44cf-4aa3-9670-43200c2d1832" 9027 + }, 9028 + "tag": [ 9029 + { 9030 + "href": "/api/tags/shoulders" 9031 + } 9032 + ] 9033 + }, 9034 + "id": "b292faa1-44cf-4aa3-9670-43200c2d1832", 9035 + "created": "2016-02-19T05:42:34.854Z", 9036 + "lastChanged": "2018-09-21T10:16:42.981Z", 9037 + "name": { 9038 + "en": "Front Raise (Cable)" 9039 + }, 9040 + "instructions": { 9041 + "en": "Grasp cable handles in a pronated grip standing with feet shoulder width.||With arm straight, lift the handle as you exhale.||Hold the upper position and inhale moving back to the starting position.||Repeat for reps." 9042 + }, 9043 + "media": [ 9044 + { 9045 + "url": "https://files.strong.app/users/global/VIDFr5Z4hQjuj.mp4", 9046 + "type": "VIDEO", 9047 + "contentType": "video/mp4" 9048 + }, 9049 + { 9050 + "url": "https://files.strong.app/users/global/THUFr5Z4hQjuj%403x.png", 9051 + "type": "THUMBNAIL", 9052 + "contentType": "image/png" 9053 + } 9054 + ], 9055 + "cellTypeConfigs": [ 9056 + { 9057 + "cellType": "OTHER_WEIGHT", 9058 + "mandatory": true 9059 + }, 9060 + { 9061 + "cellType": "REPS", 9062 + "mandatory": true 9063 + }, 9064 + { 9065 + "cellType": "RPE", 9066 + "isExponent": true 9067 + } 9068 + ], 9069 + "isGlobal": true, 9070 + "measurementType": "EXERCISE" 9071 + }, 9072 + { 9073 + "_links": { 9074 + "self": { 9075 + "href": "/api/measurements/0abcf1b6-58f6-4ec9-be63-32bd5c3cfd33" 9076 + }, 9077 + "tag": [ 9078 + { 9079 + "href": "/api/tags/shoulders" 9080 + } 9081 + ] 9082 + }, 9083 + "id": "0abcf1b6-58f6-4ec9-be63-32bd5c3cfd33", 9084 + "created": "2016-02-19T05:42:34.848Z", 9085 + "lastChanged": "2018-09-21T10:15:21.391Z", 9086 + "name": { 9087 + "en": "Face Pull (Cable)" 9088 + }, 9089 + "instructions": { 9090 + "en": "Secure band to object at head level and hold handles with arms extended in front.||Keeping elbows at shoulder height, pull handles towards the side of the head while exhaling.||Hold and return to starting position while exhaling.||Repeat for reps." 9091 + }, 9092 + "media": [ 9093 + { 9094 + "url": "https://files.strong.app/users/global/IMGIsQD1RLCAw.jpg", 9095 + "type": "IMAGE", 9096 + "contentType": "image/jpeg" 9097 + }, 9098 + { 9099 + "url": "https://files.strong.app/users/global/THUIsQD1RLCAw%403x.png", 9100 + "type": "THUMBNAIL", 9101 + "contentType": "image/png" 9102 + } 9103 + ], 9104 + "cellTypeConfigs": [ 9105 + { 9106 + "cellType": "OTHER_WEIGHT", 9107 + "mandatory": true 9108 + }, 9109 + { 9110 + "cellType": "REPS", 9111 + "mandatory": true 9112 + }, 9113 + { 9114 + "cellType": "RPE", 9115 + "isExponent": true 9116 + } 9117 + ], 9118 + "isGlobal": true, 9119 + "measurementType": "EXERCISE" 9120 + }, 9121 + { 9122 + "_links": { 9123 + "self": { 9124 + "href": "/api/measurements/aa185f9c-9341-4260-b007-593e9b74db10" 9125 + }, 9126 + "tag": [ 9127 + { 9128 + "href": "/api/tags/back" 9129 + } 9130 + ] 9131 + }, 9132 + "id": "aa185f9c-9341-4260-b007-593e9b74db10", 9133 + "created": "2016-02-19T05:42:34.842Z", 9134 + "lastChanged": "2018-09-21T10:27:04.215Z", 9135 + "name": { 9136 + "en": "Seated Wide-Grip Row (Cable)" 9137 + }, 9138 + "instructions": { 9139 + "en": "Attach the wide grip bar and grip the attachment with both hands and sit with chest upright and back straight.||With shoulders retracted, pull the handle towards the mid torso.||Squeeze the back muscles as the handle approaches the torso and hold before returning to the starting position.||Repeat for reps." 9140 + }, 9141 + "media": [ 9142 + { 9143 + "url": "https://files.strong.app/users/global/VIDVD2qcujHDC.mp4", 9144 + "type": "VIDEO", 9145 + "contentType": "video/mp4" 9146 + }, 9147 + { 9148 + "url": "https://files.strong.app/users/global/THUVD2qcujHDC%403x.png", 9149 + "type": "THUMBNAIL", 9150 + "contentType": "image/png" 9151 + } 9152 + ], 9153 + "cellTypeConfigs": [ 9154 + { 9155 + "cellType": "OTHER_WEIGHT", 9156 + "mandatory": true 9157 + }, 9158 + { 9159 + "cellType": "REPS", 9160 + "mandatory": true 9161 + }, 9162 + { 9163 + "cellType": "RPE", 9164 + "isExponent": true 9165 + } 9166 + ], 9167 + "isGlobal": true, 9168 + "measurementType": "EXERCISE" 9169 + }, 9170 + { 9171 + "_links": { 9172 + "self": { 9173 + "href": "/api/measurements/6102ebdd-f375-4cdb-8f3e-b50fbe0086ef" 9174 + }, 9175 + "tag": [ 9176 + { 9177 + "href": "/api/tags/core" 9178 + } 9179 + ] 9180 + }, 9181 + "id": "6102ebdd-f375-4cdb-8f3e-b50fbe0086ef", 9182 + "created": "2016-02-19T05:42:34.836Z", 9183 + "lastChanged": "2017-12-15T07:13:37.888Z", 9184 + "name": { 9185 + "en": "Cable Crunch" 9186 + }, 9187 + "instructions": { 9188 + "en": "Attach the rope attachment to the cable machine and sit in a kneeling position under the pulley.||Holding the rope behind the head pull downward in a crunch motion until the elbows touch the thighs.||Return to the starting position in a controlled motion.||Repeat for reps." 9189 + }, 9190 + "media": [ 9191 + { 9192 + "url": "https://files.strong.app/users/global/IMGARFhriXsPy.jpg", 9193 + "type": "IMAGE", 9194 + "contentType": "image/jpeg" 9195 + }, 9196 + { 9197 + "url": "https://files.strong.app/users/global/THUARFhriXsPy%403x.png", 9198 + "type": "THUMBNAIL", 9199 + "contentType": "image/png" 9200 + } 9201 + ], 9202 + "cellTypeConfigs": [ 9203 + { 9204 + "cellType": "OTHER_WEIGHT", 9205 + "mandatory": true 9206 + }, 9207 + { 9208 + "cellType": "REPS", 9209 + "mandatory": true 9210 + }, 9211 + { 9212 + "cellType": "RPE", 9213 + "isExponent": true 9214 + } 9215 + ], 9216 + "isGlobal": true, 9217 + "measurementType": "EXERCISE" 9218 + }, 9219 + { 9220 + "_links": { 9221 + "self": { 9222 + "href": "/api/measurements/b101465f-bec5-40cd-9434-0d832e5c655e" 9223 + }, 9224 + "tag": [ 9225 + { 9226 + "href": "/api/tags/chest" 9227 + } 9228 + ] 9229 + }, 9230 + "id": "b101465f-bec5-40cd-9434-0d832e5c655e", 9231 + "created": "2016-02-19T05:42:34.831Z", 9232 + "lastChanged": "2017-12-15T07:12:58.608Z", 9233 + "name": { 9234 + "en": "Cable Crossover" 9235 + }, 9236 + "instructions": { 9237 + "en": "Grab the handles and aise arms to the side with palms facing forward and a slight bend at the elbow.||Bring handles across the chest in a circular motion, squeezing the chest as the hands meet.||Return handles to the starting position and repeat for reps." 9238 + }, 9239 + "media": [ 9240 + { 9241 + "url": "https://files.strong.app/users/global/IMGpTV7Q84sJW.jpg", 9242 + "type": "IMAGE", 9243 + "contentType": "image/jpeg" 9244 + }, 9245 + { 9246 + "url": "https://files.strong.app/users/global/THUpTV7Q84sJW%403x.png", 9247 + "type": "THUMBNAIL", 9248 + "contentType": "image/png" 9249 + } 9250 + ], 9251 + "cellTypeConfigs": [ 9252 + { 9253 + "cellType": "OTHER_WEIGHT", 9254 + "mandatory": true 9255 + }, 9256 + { 9257 + "cellType": "REPS", 9258 + "mandatory": true 9259 + }, 9260 + { 9261 + "cellType": "RPE", 9262 + "isExponent": true 9263 + } 9264 + ], 9265 + "isGlobal": true, 9266 + "measurementType": "EXERCISE" 9267 + }, 9268 + { 9269 + "_links": { 9270 + "self": { 9271 + "href": "/api/measurements/e6cb00c6-1460-4440-9c19-7fd6f4badf8d" 9272 + }, 9273 + "tag": [ 9274 + { 9275 + "href": "/api/tags/arms" 9276 + } 9277 + ] 9278 + }, 9279 + "id": "e6cb00c6-1460-4440-9c19-7fd6f4badf8d", 9280 + "created": "2016-02-19T05:42:34.824Z", 9281 + "lastChanged": "2017-12-15T07:08:22.649Z", 9282 + "name": { 9283 + "en": "Bicep Curl (Machine)" 9284 + }, 9285 + "instructions": { 9286 + "en": "Adjust weight, seat height and other settings to the appropriate selection.||Place upper arm against the padding and flex the elbow, pulling lower arm towards the bicep.||Pause at the top, flexing the bicep.||Return to the starting position.||Repeat for reps." 9287 + }, 9288 + "media": [ 9289 + { 9290 + "url": "https://files.strong.app/users/global/IMGENycNTGojT.jpg", 9291 + "type": "IMAGE", 9292 + "contentType": "image/jpeg" 9293 + }, 9294 + { 9295 + "url": "https://files.strong.app/users/global/THUENycNTGojT%403x.png", 9296 + "type": "THUMBNAIL", 9297 + "contentType": "image/png" 9298 + } 9299 + ], 9300 + "cellTypeConfigs": [ 9301 + { 9302 + "cellType": "OTHER_WEIGHT", 9303 + "mandatory": true 9304 + }, 9305 + { 9306 + "cellType": "REPS", 9307 + "mandatory": true 9308 + }, 9309 + { 9310 + "cellType": "RPE", 9311 + "isExponent": true 9312 + } 9313 + ], 9314 + "isGlobal": true, 9315 + "measurementType": "EXERCISE" 9316 + }, 9317 + { 9318 + "_links": { 9319 + "self": { 9320 + "href": "/api/measurements/b0c8a069-aae9-40d4-b842-a61a3c7cacde" 9321 + }, 9322 + "tag": [ 9323 + { 9324 + "href": "/api/tags/chest" 9325 + } 9326 + ] 9327 + }, 9328 + "id": "b0c8a069-aae9-40d4-b842-a61a3c7cacde", 9329 + "created": "2016-02-19T05:42:34.819Z", 9330 + "lastChanged": "2018-09-21T10:38:44.969Z", 9331 + "name": { 9332 + "en": "Bench Press (Smith Machine)" 9333 + }, 9334 + "instructions": { 9335 + "en": "Place flat bench below smith bar and hold bar with a pronated grip at shoulder width.||Unlock bar from smith rail and hold bar above the chest with arms straight.||Retract scapula and have elbows between 45 to 90 degree angle. An advanced tip is to tuck the shoulders down into the sockets and driven back.||Breathe in and lower bar to the middle chest.||After pausing at the bottom, push the bar towards the starting position squeezing the chest.||Repeat for reps." 9336 + }, 9337 + "media": [ 9338 + { 9339 + "url": "https://files.strong.app/users/global/VIDKRODWQlTsz.mp4", 9340 + "type": "VIDEO", 9341 + "contentType": "video/mp4" 9342 + }, 9343 + { 9344 + "url": "https://files.strong.app/users/global/THUKRODWQlTsz%403x.png", 9345 + "type": "THUMBNAIL", 9346 + "contentType": "image/png" 9347 + } 9348 + ], 9349 + "cellTypeConfigs": [ 9350 + { 9351 + "cellType": "OTHER_WEIGHT", 9352 + "mandatory": true 9353 + }, 9354 + { 9355 + "cellType": "REPS", 9356 + "mandatory": true 9357 + }, 9358 + { 9359 + "cellType": "RPE", 9360 + "isExponent": true 9361 + } 9362 + ], 9363 + "isGlobal": true, 9364 + "measurementType": "EXERCISE" 9365 + }, 9366 + { 9367 + "_links": { 9368 + "self": { 9369 + "href": "/api/measurements/93d038a6-92fc-484d-a948-9fad070ff5b1" 9370 + }, 9371 + "tag": [ 9372 + { 9373 + "href": "/api/tags/back" 9374 + } 9375 + ] 9376 + }, 9377 + "id": "93d038a6-92fc-484d-a948-9fad070ff5b1", 9378 + "created": "2016-02-19T05:42:34.813Z", 9379 + "lastChanged": "2017-12-15T06:57:41.092Z", 9380 + "name": { 9381 + "en": "Back Extension (Machine)" 9382 + }, 9383 + "instructions": { 9384 + "en": "Adjust weight, seat height and other settings to the appropriate selection.||Place middle back against the roller with feet secured to the foot rest.||Extend the hips and lumbar spine to straighten your body and to push the roller until the back is straight.||Slowly return to starting position.||Repeat for reps." 9385 + }, 9386 + "media": [ 9387 + { 9388 + "url": "https://files.strong.app/users/global/VIDA02el3s1qm.mp4", 9389 + "type": "VIDEO", 9390 + "contentType": "video/mp4" 9391 + }, 9392 + { 9393 + "url": "https://files.strong.app/users/global/THUA02el3s1qm%403x.png", 9394 + "type": "THUMBNAIL", 9395 + "contentType": "image/png" 9396 + } 9397 + ], 9398 + "cellTypeConfigs": [ 9399 + { 9400 + "cellType": "OTHER_WEIGHT", 9401 + "mandatory": true 9402 + }, 9403 + { 9404 + "cellType": "REPS", 9405 + "mandatory": true 9406 + }, 9407 + { 9408 + "cellType": "RPE", 9409 + "isExponent": true 9410 + } 9411 + ], 9412 + "isGlobal": true, 9413 + "measurementType": "EXERCISE" 9414 + }, 9415 + { 9416 + "_links": { 9417 + "self": { 9418 + "href": "/api/measurements/9df1b947-b05e-4250-84c4-b8dd55348ff6" 9419 + }, 9420 + "tag": [ 9421 + { 9422 + "href": "/api/tags/arms" 9423 + } 9424 + ] 9425 + }, 9426 + "id": "9df1b947-b05e-4250-84c4-b8dd55348ff6", 9427 + "created": "2016-02-19T05:42:34.808Z", 9428 + "lastChanged": "2018-09-21T09:36:59.539Z", 9429 + "name": { 9430 + "en": "Triceps Extension (Dumbbell)" 9431 + }, 9432 + "instructions": { 9433 + "en": "Hold a dumbbell with both hands over head with arms fully extended.||Lower the dumbbell in a circular motion behind the head until the forearms touch the biceps.||Return to the starting position by flexing the triceps.||Repeat for reps." 9434 + }, 9435 + "media": [ 9436 + { 9437 + "url": "https://files.strong.app/users/global/VIDXNk3KVf0cq.mp4", 9438 + "type": "VIDEO", 9439 + "contentType": "video/mp4" 9440 + }, 9441 + { 9442 + "url": "https://files.strong.app/users/global/THUXNk3KVf0cq%403x.png", 9443 + "type": "THUMBNAIL", 9444 + "contentType": "image/png" 9445 + } 9446 + ], 9447 + "cellTypeConfigs": [ 9448 + { 9449 + "cellType": "DUMBBELL_WEIGHT", 9450 + "mandatory": true 9451 + }, 9452 + { 9453 + "cellType": "REPS", 9454 + "mandatory": true 9455 + }, 9456 + { 9457 + "cellType": "RPE", 9458 + "isExponent": true 9459 + } 9460 + ], 9461 + "isGlobal": true, 9462 + "measurementType": "EXERCISE" 9463 + }, 9464 + { 9465 + "_links": { 9466 + "self": { 9467 + "href": "/api/measurements/3e1394a8-dba1-45d0-bc5c-d6100f8f8154" 9468 + }, 9469 + "tag": [ 9470 + { 9471 + "href": "/api/tags/legs" 9472 + } 9473 + ] 9474 + }, 9475 + "id": "3e1394a8-dba1-45d0-bc5c-d6100f8f8154", 9476 + "created": "2016-02-19T05:42:34.801Z", 9477 + "lastChanged": "2017-12-15T07:33:45.205Z", 9478 + "name": { 9479 + "en": "Squat (Dumbbell)" 9480 + }, 9481 + "instructions": { 9482 + "en": "Holding a dumbbell in each hand by the side of the body, place feet at shoulder width apart.||Keeping core braced, chest up and head neutral, break at the hips keeping pressure on the midfoot and descend into a squat. Continue lowering the body until the thighs are at or past parallel with the ground.||Exhaling, drive through the heels and midfoot, pushing knees outward until back to starting position.||Repeat for reps." 9483 + }, 9484 + "media": [ 9485 + { 9486 + "url": "https://files.strong.app/users/global/IMGimWgXDi5E0.jpg", 9487 + "type": "IMAGE", 9488 + "contentType": "image/jpeg" 9489 + }, 9490 + { 9491 + "url": "https://files.strong.app/users/global/THUimWgXDi5E0%403x.png", 9492 + "type": "THUMBNAIL", 9493 + "contentType": "image/png" 9494 + } 9495 + ], 9496 + "cellTypeConfigs": [ 9497 + { 9498 + "cellType": "DUMBBELL_WEIGHT", 9499 + "mandatory": true 9500 + }, 9501 + { 9502 + "cellType": "REPS", 9503 + "mandatory": true 9504 + }, 9505 + { 9506 + "cellType": "RPE", 9507 + "isExponent": true 9508 + } 9509 + ], 9510 + "isGlobal": true, 9511 + "measurementType": "EXERCISE" 9512 + } 9513 + ] 9514 + } 9515 + }
+2094
strong-api-lib/tests/fixtures/user_response.json
··· 1 + { 2 + "_links": { 3 + "self": { 4 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 5 + }, 6 + "folders": { 7 + "href": "/api/folders/0f518518-5180-4518-b518-51b51851b518" 8 + }, 9 + "folder": { 10 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/folders/{id}", 11 + "templated": true 12 + }, 13 + "measurements": { 14 + "href": "/api/measurements/0f518518-5180-4518-b518-51b51851b518" 15 + }, 16 + "measurement": { 17 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/{id}", 18 + "templated": true 19 + }, 20 + "measuredValues": { 21 + "href": "/api/measuredvalues/0f518518-5180-4518-b518-51b51851b518" 22 + }, 23 + "measuredValue": { 24 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measuredvalues/{id}", 25 + "templated": true 26 + }, 27 + "templates": { 28 + "href": "/api/templates/0f518518-5180-4518-b518-51b51851b518" 29 + }, 30 + "template": { 31 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/{id}", 32 + "templated": true 33 + }, 34 + "metrics": { 35 + "href": "/api/metrics/0f518518-5180-4518-b518-51b51851b518" 36 + }, 37 + "metric": { 38 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/metrics/{id}", 39 + "templated": true 40 + }, 41 + "metricCaches": { 42 + "href": "/api/metriccaches/0f518518-5180-4518-b518-51b51851b518" 43 + }, 44 + "metricCache": { 45 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/metriccaches/{id}", 46 + "templated": true 47 + }, 48 + "logs": { 49 + "href": "/api/logs/0f518518-5180-4518-b518-51b51851b518" 50 + }, 51 + "log": { 52 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/{id}", 53 + "templated": true 54 + }, 55 + "tags": { 56 + "href": "/api/tags/0f518518-5180-4518-b518-51b51851b518" 57 + }, 58 + "tag": { 59 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/{id}", 60 + "templated": true 61 + }, 62 + "widgets": { 63 + "href": "/api/widgets/0f518518-5180-4518-b518-51b51851b518" 64 + }, 65 + "widget": { 66 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/widgets/{id}", 67 + "templated": true 68 + }, 69 + "next": { 70 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518?include=log&include=measurement&continuation=ARXq6MgWOgQA-JlAPuM5CA&limit=5" 71 + } 72 + }, 73 + "_embedded": { 74 + "measurement": [ 75 + { 76 + "_links": { 77 + "self": { 78 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6de1b274-f023-49f2-94ec-add08373b7e4" 79 + }, 80 + "user": { 81 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 82 + }, 83 + "tag": [ 84 + { 85 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 86 + } 87 + ] 88 + }, 89 + "id": "6de1b274-f023-49f2-94ec-add08373b7e4", 90 + "created": "2016-02-19T05:42:36.756Z", 91 + "lastChanged": "2017-12-06T13:45:30.693Z", 92 + "name": { 93 + "en": "Yoga" 94 + }, 95 + "media": [], 96 + "cellTypeConfigs": [ 97 + { 98 + "cellType": "DURATION", 99 + "mandatory": true 100 + } 101 + ], 102 + "isGlobal": true, 103 + "measurementType": "EXERCISE" 104 + }, 105 + { 106 + "_links": { 107 + "self": { 108 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/0ea248ec-76d2-47b1-aba5-c35160a3236f" 109 + }, 110 + "user": { 111 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 112 + }, 113 + "tag": [ 114 + { 115 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 116 + } 117 + ] 118 + }, 119 + "id": "0ea248ec-76d2-47b1-aba5-c35160a3236f", 120 + "created": "2016-02-19T05:42:35.179Z", 121 + "lastChanged": "2017-12-06T13:45:43.206Z", 122 + "name": { 123 + "en": "Climbing" 124 + }, 125 + "media": [], 126 + "cellTypeConfigs": [ 127 + { 128 + "cellType": "DURATION", 129 + "mandatory": true 130 + } 131 + ], 132 + "isGlobal": true, 133 + "measurementType": "EXERCISE" 134 + }, 135 + { 136 + "_links": { 137 + "self": { 138 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/05aa6d82-6388-4c3d-87a5-8d8edc1b3431" 139 + }, 140 + "user": { 141 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 142 + }, 143 + "tag": [ 144 + { 145 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 146 + } 147 + ] 148 + }, 149 + "id": "05aa6d82-6388-4c3d-87a5-8d8edc1b3431", 150 + "created": "2016-02-19T05:42:35.172Z", 151 + "lastChanged": "2017-12-06T13:45:56.587Z", 152 + "name": { 153 + "en": "Aerobics" 154 + }, 155 + "media": [], 156 + "cellTypeConfigs": [ 157 + { 158 + "cellType": "DURATION", 159 + "mandatory": true 160 + } 161 + ], 162 + "isGlobal": true, 163 + "measurementType": "EXERCISE" 164 + }, 165 + { 166 + "_links": { 167 + "self": { 168 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a8225200-79fb-4131-8ea2-c4df95f56c77" 169 + }, 170 + "user": { 171 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 172 + }, 173 + "tag": [ 174 + { 175 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 176 + } 177 + ] 178 + }, 179 + "id": "a8225200-79fb-4131-8ea2-c4df95f56c77", 180 + "created": "2016-02-19T05:42:35.16Z", 181 + "lastChanged": "2017-12-06T13:46:14.551Z", 182 + "name": { 183 + "en": "Swimming" 184 + }, 185 + "media": [], 186 + "cellTypeConfigs": [ 187 + { 188 + "cellType": "DISTANCE" 189 + }, 190 + { 191 + "cellType": "DURATION" 192 + } 193 + ], 194 + "isGlobal": true, 195 + "measurementType": "EXERCISE" 196 + }, 197 + { 198 + "_links": { 199 + "self": { 200 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/95aef7e7-e232-4442-851e-2231e7b54317" 201 + }, 202 + "user": { 203 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 204 + }, 205 + "tag": [ 206 + { 207 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 208 + } 209 + ] 210 + }, 211 + "id": "95aef7e7-e232-4442-851e-2231e7b54317", 212 + "created": "2016-02-19T05:42:35.155Z", 213 + "lastChanged": "2017-12-06T13:46:17.704Z", 214 + "name": { 215 + "en": "Skating" 216 + }, 217 + "media": [], 218 + "cellTypeConfigs": [ 219 + { 220 + "cellType": "DISTANCE" 221 + }, 222 + { 223 + "cellType": "DURATION" 224 + } 225 + ], 226 + "isGlobal": true, 227 + "measurementType": "EXERCISE" 228 + } 229 + ], 230 + "log": [ 231 + { 232 + "_links": { 233 + "self": { 234 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/5f91749b-34b0-4c6d-be09-f10bee3b0fd6" 235 + }, 236 + "user": { 237 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 238 + } 239 + }, 240 + "_embedded": { 241 + "cellSetGroup": [ 242 + { 243 + "_links": { 244 + "measurement": { 245 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a8121bda-a232-4da2-be80-85bbe05c53d7" 246 + } 247 + }, 248 + "_embedded": {}, 249 + "id": "7fb02df9-d06d-46a2-aa68-1ed000bd1f5e", 250 + "cellSets": [ 251 + { 252 + "id": "b237f058-3838-45a5-8147-347874d57c1d", 253 + "cells": [ 254 + { 255 + "id": "90ebc3c3-2dc0-4860-bf45-93ac075d430d", 256 + "cellType": "OTHER_WEIGHT", 257 + "value": "60" 258 + }, 259 + { 260 + "id": "a2cdc0a3-ef17-4f98-b656-60c0bc2d20e1", 261 + "cellType": "REPS", 262 + "value": "12" 263 + } 264 + ], 265 + "isCompleted": true 266 + }, 267 + { 268 + "id": "a2daa8b2-176f-4d21-8b5a-6d0a61d7ddf5", 269 + "cells": [ 270 + { 271 + "id": "866d86e9-a9ae-450b-bae2-b6d760c1aa40", 272 + "cellType": "OTHER_WEIGHT", 273 + "value": "70" 274 + }, 275 + { 276 + "id": "2459cb9c-4d2b-4fff-b175-c46708691ea8", 277 + "cellType": "REPS", 278 + "value": "12" 279 + } 280 + ], 281 + "isCompleted": true 282 + }, 283 + { 284 + "id": "89567e2f-263a-4ac3-a64f-1c96de51788e", 285 + "cells": [ 286 + { 287 + "id": "799d311b-b08d-4c5d-a677-b882ffe52a44", 288 + "cellType": "OTHER_WEIGHT", 289 + "value": "70" 290 + }, 291 + { 292 + "id": "f1a0766e-b6b6-4f4d-82c9-12e374d5345e", 293 + "cellType": "REPS", 294 + "value": "13" 295 + } 296 + ], 297 + "isCompleted": true 298 + }, 299 + { 300 + "id": "0886cc4b-79d7-4cbe-bdb7-72d99e59b66b", 301 + "cells": [ 302 + { 303 + "id": "1a63ac74-81eb-4dbf-8e65-8034a5a58c75", 304 + "cellType": "OTHER_WEIGHT", 305 + "value": "80" 306 + }, 307 + { 308 + "id": "c789d9b7-beec-4abd-9034-0c25bcb633a5", 309 + "cellType": "REPS", 310 + "value": "9" 311 + } 312 + ], 313 + "isCompleted": true 314 + } 315 + ] 316 + }, 317 + { 318 + "_links": { 319 + "measurement": { 320 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/534954cb-6720-45c4-bf63-a0766142ec6c" 321 + } 322 + }, 323 + "_embedded": {}, 324 + "id": "797e7a4f-9e65-4114-a17d-7977bd0d22e4", 325 + "cellSets": [ 326 + { 327 + "id": "7f579148-e96a-457c-bd2e-1ce90d67b255", 328 + "cells": [ 329 + { 330 + "id": "73c1879f-c5e7-47c5-8f21-e1bd04034973", 331 + "cellType": "OTHER_WEIGHT", 332 + "value": "35" 333 + }, 334 + { 335 + "id": "b82a6a51-9b8b-489f-b1c6-34c62ab35d93", 336 + "cellType": "REPS", 337 + "value": "13" 338 + } 339 + ], 340 + "isCompleted": true 341 + }, 342 + { 343 + "id": "1d5a4ae5-8622-46ed-9579-0364ad8fcad8", 344 + "cells": [ 345 + { 346 + "id": "cb4a6d2a-318a-4607-812f-476e605a4f13", 347 + "cellType": "OTHER_WEIGHT", 348 + "value": "35" 349 + }, 350 + { 351 + "id": "79f2a2cd-45ed-49c4-8f8b-f70a805972d7", 352 + "cellType": "REPS", 353 + "value": "13" 354 + } 355 + ], 356 + "isCompleted": true 357 + }, 358 + { 359 + "id": "5ef09f65-d8c9-479b-b7ee-b20098cfd5e4", 360 + "cells": [ 361 + { 362 + "id": "29368a6b-46f1-4941-a40d-44df4d09df31", 363 + "cellType": "OTHER_WEIGHT", 364 + "value": "35" 365 + }, 366 + { 367 + "id": "49365386-1cf3-4b25-ade4-c8def1a3fc32", 368 + "cellType": "REPS", 369 + "value": "12" 370 + } 371 + ], 372 + "isCompleted": true 373 + } 374 + ] 375 + }, 376 + { 377 + "_links": { 378 + "measurement": { 379 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8dc8a29b-674b-43c9-bf6e-46b95f3414be" 380 + } 381 + }, 382 + "_embedded": {}, 383 + "id": "4c55828a-ac23-4c24-93a1-3b7c22a80c2e", 384 + "cellSets": [ 385 + { 386 + "id": "9a36060b-7991-4e7f-8a96-b4c6aed1eab4", 387 + "cells": [ 388 + { 389 + "id": "13efe0e1-959f-42f6-87de-eac1762f3b8e", 390 + "cellType": "OTHER_WEIGHT", 391 + "value": "30" 392 + }, 393 + { 394 + "id": "a80d0da8-b579-4ff7-856f-ea7ed2e082c3", 395 + "cellType": "REPS", 396 + "value": "11" 397 + } 398 + ], 399 + "isCompleted": true 400 + }, 401 + { 402 + "id": "f2a6ab19-b84d-45c8-bdf5-5c0e593ae71a", 403 + "cells": [ 404 + { 405 + "id": "8be5c089-4fdc-42c6-8dce-5d16cf4bc379", 406 + "cellType": "OTHER_WEIGHT", 407 + "value": "30" 408 + }, 409 + { 410 + "id": "f961534b-c287-4064-83b2-0f201ae671aa", 411 + "cellType": "REPS", 412 + "value": "12" 413 + } 414 + ], 415 + "isCompleted": true 416 + }, 417 + { 418 + "id": "96d2d90a-056a-4c44-b5a3-dd3fdb43d6bc", 419 + "cells": [ 420 + { 421 + "id": "d2936c98-b2ba-475f-8f2d-95141bcd4b82", 422 + "cellType": "OTHER_WEIGHT", 423 + "value": "35" 424 + }, 425 + { 426 + "id": "2a24d0fc-3389-48af-a2f6-7efe60836f1c", 427 + "cellType": "REPS", 428 + "value": "8" 429 + } 430 + ], 431 + "isCompleted": true 432 + } 433 + ] 434 + }, 435 + { 436 + "_links": { 437 + "measurement": { 438 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b92aa3dd-98e1-4e99-a229-434be54c1ae5" 439 + } 440 + }, 441 + "_embedded": {}, 442 + "id": "e08e0378-fa66-4342-b0eb-21a3666f379b", 443 + "cellSets": [ 444 + { 445 + "id": "a92606f2-0cde-4c9b-9dd9-e83f28a2c3f5", 446 + "cells": [ 447 + { 448 + "id": "1b9005e1-303e-4c87-b927-e03ef8fe0780", 449 + "cellType": "OTHER_WEIGHT", 450 + "value": "40" 451 + }, 452 + { 453 + "id": "a074422b-30b9-4168-8f13-0b04cdd8cc0a", 454 + "cellType": "REPS", 455 + "value": "12" 456 + } 457 + ], 458 + "isCompleted": true 459 + }, 460 + { 461 + "id": "96ed7987-50c8-4234-8213-1a426cc4523e", 462 + "cells": [ 463 + { 464 + "id": "0479edd2-4712-4dcf-8abd-175ffa76463d", 465 + "cellType": "OTHER_WEIGHT", 466 + "value": "40" 467 + }, 468 + { 469 + "id": "b717e10d-3257-40b7-8312-7df08379ab5b", 470 + "cellType": "REPS", 471 + "value": "10" 472 + } 473 + ], 474 + "isCompleted": true 475 + }, 476 + { 477 + "id": "3e45f8b3-5ac4-4d98-8ae5-bd3031d06345", 478 + "cells": [ 479 + { 480 + "id": "f56c0e01-3a11-43fc-8612-ad473061d97d", 481 + "cellType": "OTHER_WEIGHT", 482 + "value": "35" 483 + }, 484 + { 485 + "id": "fa65fff9-d5c8-4cfb-aa7e-a36d444259d4", 486 + "cellType": "REPS", 487 + "value": "10" 488 + } 489 + ], 490 + "isCompleted": true 491 + } 492 + ] 493 + }, 494 + { 495 + "_links": { 496 + "measurement": { 497 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4a304d9a-9a7a-440f-bb9a-9fd5cde6b590" 498 + } 499 + }, 500 + "_embedded": {}, 501 + "id": "6139bc82-d1c6-4a10-a32f-96baab11ecef", 502 + "cellSets": [ 503 + { 504 + "id": "b57ab46a-6449-4906-bf59-bd85a9234e50", 505 + "cells": [ 506 + { 507 + "id": "2922b18a-5ab3-436a-8fc3-184157e1f00d", 508 + "cellType": "OTHER_WEIGHT", 509 + "value": "30" 510 + }, 511 + { 512 + "id": "777301eb-5493-4c3f-8a22-6cfafe72495d", 513 + "cellType": "REPS", 514 + "value": "8" 515 + } 516 + ], 517 + "isCompleted": true 518 + }, 519 + { 520 + "id": "035c373e-16c2-41cb-9725-d4d2d63da497", 521 + "cells": [ 522 + { 523 + "id": "bb47c448-a953-4153-a444-a2e18b9efa05", 524 + "cellType": "OTHER_WEIGHT", 525 + "value": "25" 526 + }, 527 + { 528 + "id": "36510801-fc2e-43fd-a4fb-3a1d801997ad", 529 + "cellType": "REPS", 530 + "value": "10" 531 + } 532 + ], 533 + "isCompleted": true 534 + }, 535 + { 536 + "id": "5b657142-08d5-411a-ab8c-7f1ab8ac5cf1", 537 + "cells": [ 538 + { 539 + "id": "802d7ba5-3f73-47d0-b52a-fcb4a0757373", 540 + "cellType": "OTHER_WEIGHT", 541 + "value": "25" 542 + }, 543 + { 544 + "id": "8a29b6ab-fabd-4d48-984b-da5623129812", 545 + "cellType": "REPS", 546 + "value": "7" 547 + } 548 + ], 549 + "isCompleted": true 550 + } 551 + ] 552 + } 553 + ] 554 + }, 555 + "timezoneId": "Europe/Berlin", 556 + "id": "5f91749b-34b0-4c6d-be09-f10bee3b0fd6", 557 + "created": "2024-11-20T17:01:58.274Z", 558 + "lastChanged": "2024-11-20T17:02:22.772Z", 559 + "name": { 560 + "en": "Bizeps/R\u00fccken" 561 + }, 562 + "access": "PRIVATE", 563 + "startDate": "2024-11-20T16:07:54.566Z", 564 + "endDate": "2024-11-20T17:01:58.254Z", 565 + "logType": "WORKOUT" 566 + }, 567 + { 568 + "_links": { 569 + "self": { 570 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/b157b5ab-48fa-45cc-998e-00bb4599b563" 571 + }, 572 + "user": { 573 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 574 + } 575 + }, 576 + "_embedded": { 577 + "cellSetGroup": [ 578 + { 579 + "_links": {}, 580 + "_embedded": {}, 581 + "id": "8d79c437-c702-4704-81af-4bd17980e994", 582 + "cellSets": [ 583 + { 584 + "id": "994eaff8-0aa8-42ae-9355-99f4f8de929b", 585 + "cells": [ 586 + { 587 + "id": "5279b584-bf5b-4f1b-82bf-b8d2e874ae4d", 588 + "cellType": "NOTE", 589 + "value": "Just a note" 590 + } 591 + ] 592 + } 593 + ] 594 + }, 595 + { 596 + "_links": { 597 + "measurement": { 598 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 599 + } 600 + }, 601 + "_embedded": {}, 602 + "id": "3ad980d1-6463-4be7-8657-08892ed8938f", 603 + "cellSets": [ 604 + { 605 + "id": "acec6092-4236-47fc-8974-54fccc57d582", 606 + "cells": [ 607 + { 608 + "id": "d536d947-6021-46d4-8144-d885efeb1b8d", 609 + "cellType": "BARBELL_WEIGHT", 610 + "value": "30" 611 + }, 612 + { 613 + "id": "8c038916-e0ed-49e7-873c-eda96edf3a93", 614 + "cellType": "REPS", 615 + "value": "10" 616 + } 617 + ], 618 + "isCompleted": true 619 + }, 620 + { 621 + "id": "c91976a1-4223-4917-8bbe-a471f38d1411", 622 + "cells": [ 623 + { 624 + "id": "259fb3d9-ee0e-4078-b2a2-9019c14d8c0e", 625 + "cellType": "BARBELL_WEIGHT", 626 + "value": "40" 627 + }, 628 + { 629 + "id": "3dce4644-4009-446a-9f3a-fcd57d627e19", 630 + "cellType": "REPS", 631 + "value": "12" 632 + } 633 + ], 634 + "isCompleted": true 635 + }, 636 + { 637 + "id": "efdd5ff4-33c0-4e8d-b198-08c856a183a8", 638 + "cells": [ 639 + { 640 + "id": "c4f07244-3877-400c-8679-6167f7b9ae49", 641 + "cellType": "BARBELL_WEIGHT", 642 + "value": "40" 643 + }, 644 + { 645 + "id": "e054e2aa-5bf7-4232-927e-012877722f3e", 646 + "cellType": "REPS", 647 + "value": "9" 648 + } 649 + ], 650 + "isCompleted": true 651 + }, 652 + { 653 + "id": "eb229c8f-2b20-4fdc-b223-5f322db19969", 654 + "cells": [ 655 + { 656 + "id": "b5d274a6-ceea-4e79-92e9-9b4a3533c5a9", 657 + "cellType": "BARBELL_WEIGHT", 658 + "value": "40" 659 + }, 660 + { 661 + "id": "78c6eb96-c81b-425f-b3b0-5a6102555d49", 662 + "cellType": "REPS", 663 + "value": "8" 664 + } 665 + ], 666 + "isCompleted": true 667 + } 668 + ] 669 + }, 670 + { 671 + "_links": { 672 + "measurement": { 673 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6ae27da7-92b9-4af9-b2a9-e0afd827c188" 674 + } 675 + }, 676 + "_embedded": {}, 677 + "id": "3f82b56d-bb35-4336-a568-d16a8e86f15d", 678 + "cellSets": [ 679 + { 680 + "id": "5803dc38-3870-4f80-ab7d-2657fdc93b62", 681 + "cells": [ 682 + { 683 + "id": "9b8d5d7d-01e5-4b3b-8fd6-6e1a343c27ae", 684 + "cellType": "OTHER_WEIGHT", 685 + "value": "50" 686 + }, 687 + { 688 + "id": "c75a4638-dfdd-4881-a0b6-32ad0aca214a", 689 + "cellType": "REPS", 690 + "value": "3" 691 + } 692 + ], 693 + "isCompleted": true 694 + }, 695 + { 696 + "id": "84dfc421-c877-4866-b686-5b81da9c9d06", 697 + "cells": [ 698 + { 699 + "id": "35fc39ab-be07-4a47-a7be-d6351d02837d", 700 + "cellType": "OTHER_WEIGHT", 701 + "value": "40" 702 + }, 703 + { 704 + "id": "a503c6dd-5cc4-463a-8362-71227bbd3188", 705 + "cellType": "REPS", 706 + "value": "14" 707 + } 708 + ], 709 + "isCompleted": true 710 + }, 711 + { 712 + "id": "1eec407e-6597-4601-8805-06f605bea837", 713 + "cells": [ 714 + { 715 + "id": "1e3e99ea-f86e-46d4-86cb-865af2ac9037", 716 + "cellType": "OTHER_WEIGHT", 717 + "value": "45" 718 + }, 719 + { 720 + "id": "43689c77-493a-42dd-994b-c4f8d3574d50", 721 + "cellType": "REPS", 722 + "value": "7" 723 + } 724 + ], 725 + "isCompleted": true 726 + }, 727 + { 728 + "id": "0800ae2e-c48a-4fb4-ab42-bb8bb561908d", 729 + "cells": [ 730 + { 731 + "id": "676d2bd8-b00d-4245-899d-03d50d44b83b", 732 + "cellType": "OTHER_WEIGHT", 733 + "value": "45" 734 + }, 735 + { 736 + "id": "09ab3eee-8552-4d6c-ae03-c6f5ba09354e", 737 + "cellType": "REPS", 738 + "value": "8" 739 + } 740 + ], 741 + "isCompleted": true 742 + } 743 + ] 744 + }, 745 + { 746 + "_links": { 747 + "measurement": { 748 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a60fd1af-31d7-4235-92cd-57f76d1c39e9" 749 + } 750 + }, 751 + "_embedded": {}, 752 + "id": "b26a47f3-d669-442b-a1ec-8c1c50cbb924", 753 + "cellSets": [ 754 + { 755 + "id": "e8b9474e-e7e3-4e24-b1bc-dd1b7dbc1fd8", 756 + "cells": [ 757 + { 758 + "id": "a8fc112c-b107-49e3-bcde-b014a72d2639", 759 + "cellType": "OTHER_WEIGHT", 760 + "value": "30" 761 + }, 762 + { 763 + "id": "7165048d-faf3-47ca-9651-a04255a5d5ae", 764 + "cellType": "REPS", 765 + "value": "10" 766 + } 767 + ], 768 + "isCompleted": true 769 + }, 770 + { 771 + "id": "3489da77-c4a3-48ca-9451-3a651c498de2", 772 + "cells": [ 773 + { 774 + "id": "342aa1b1-d46c-4715-9911-144c1dab0159", 775 + "cellType": "OTHER_WEIGHT", 776 + "value": "35" 777 + }, 778 + { 779 + "id": "0c0174b8-6c43-47e1-a342-3cc783d313b4", 780 + "cellType": "REPS", 781 + "value": "10" 782 + } 783 + ], 784 + "isCompleted": true 785 + }, 786 + { 787 + "id": "6e86d0c4-0724-4378-8f83-1718b5038c4c", 788 + "cells": [ 789 + { 790 + "id": "c70fde04-9841-4734-90b4-72e55675e7b9", 791 + "cellType": "OTHER_WEIGHT", 792 + "value": "35" 793 + }, 794 + { 795 + "id": "5e5df9ce-5ca5-4fb9-969b-9ac9052d3e3e", 796 + "cellType": "REPS", 797 + "value": "10" 798 + } 799 + ], 800 + "isCompleted": true 801 + } 802 + ] 803 + }, 804 + { 805 + "_links": { 806 + "measurement": { 807 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/737d7664-5231-44f9-a112-a4c087f67675" 808 + } 809 + }, 810 + "_embedded": {}, 811 + "id": "17c722c2-cda9-4fcb-bfb5-b4402f3f7f19", 812 + "cellSets": [ 813 + { 814 + "id": "a203df22-451e-4913-951e-a5363a6de8e5", 815 + "cells": [ 816 + { 817 + "id": "9ff21fa6-3858-4e6b-81fb-eb098b336cf9", 818 + "cellType": "DUMBBELL_WEIGHT", 819 + "value": "14" 820 + }, 821 + { 822 + "id": "4d4ba8bd-d3b2-4a06-aaa0-62b50673c0ef", 823 + "cellType": "REPS", 824 + "value": "6" 825 + } 826 + ], 827 + "isCompleted": true 828 + }, 829 + { 830 + "id": "a91c9120-8781-478e-a174-babea6b91666", 831 + "cells": [ 832 + { 833 + "id": "a78f08ae-4b36-44f1-9f31-ece0d79ad39d", 834 + "cellType": "DUMBBELL_WEIGHT", 835 + "value": "14" 836 + }, 837 + { 838 + "id": "53a52a51-2999-4c11-8152-ce9f7b8c74a0", 839 + "cellType": "REPS", 840 + "value": "6" 841 + } 842 + ], 843 + "isCompleted": true 844 + } 845 + ] 846 + }, 847 + { 848 + "_links": { 849 + "measurement": { 850 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/91efd24a-9acc-40dd-8f7f-16a1ab175f33" 851 + } 852 + }, 853 + "_embedded": {}, 854 + "id": "a7f04fe3-0d4f-4f96-bd90-a1df38de5e09", 855 + "cellSets": [ 856 + { 857 + "id": "b24da8b2-b165-411c-81df-531079e61c66", 858 + "cells": [ 859 + { 860 + "id": "8b4b4956-4e51-4aed-908f-7ab4577c2fb3", 861 + "cellType": "BARBELL_WEIGHT", 862 + "value": "35" 863 + }, 864 + { 865 + "id": "e3442043-476f-491c-a769-ab1af975375e", 866 + "cellType": "REPS", 867 + "value": "15" 868 + } 869 + ], 870 + "isCompleted": true 871 + }, 872 + { 873 + "id": "217fc6ac-c39e-4a25-83c6-90eb99b1725e", 874 + "cells": [ 875 + { 876 + "id": "4a5636fa-2cdf-4068-bfaf-c6d2ab7bfaf1", 877 + "cellType": "BARBELL_WEIGHT", 878 + "value": "40" 879 + }, 880 + { 881 + "id": "c55ffa5a-be89-44e5-9551-3e3efad06319", 882 + "cellType": "REPS", 883 + "value": "11" 884 + } 885 + ], 886 + "isCompleted": true 887 + }, 888 + { 889 + "id": "3a88e626-2da4-4b79-9f18-7797faea1e5f", 890 + "cells": [ 891 + { 892 + "id": "136e4d48-76b7-4346-aa8a-82051b0d01d0", 893 + "cellType": "BARBELL_WEIGHT", 894 + "value": "40" 895 + }, 896 + { 897 + "id": "4a059d2e-b750-4e77-a2f1-1c267d6a2e00", 898 + "cellType": "REPS", 899 + "value": "8" 900 + } 901 + ], 902 + "isCompleted": true 903 + }, 904 + { 905 + "id": "94d0fae4-40eb-476c-8603-34a018f00ecd", 906 + "cells": [ 907 + { 908 + "id": "cc7f05e2-0ca7-4aba-80f7-488049b814cb", 909 + "cellType": "BARBELL_WEIGHT", 910 + "value": "40" 911 + }, 912 + { 913 + "id": "b2851c89-d250-4fdb-a111-3d474be0227a", 914 + "cellType": "REPS", 915 + "value": "8" 916 + } 917 + ], 918 + "isCompleted": true 919 + } 920 + ] 921 + } 922 + ] 923 + }, 924 + "timezoneId": "Europe/Berlin", 925 + "id": "b157b5ab-48fa-45cc-998e-00bb4599b563", 926 + "created": "2024-12-02T17:34:29.575Z", 927 + "lastChanged": "2024-12-02T20:54:41.558Z", 928 + "name": { 929 + "en": "Brust/Trizeps" 930 + }, 931 + "access": "PRIVATE", 932 + "startDate": "2024-12-02T16:26:27.629Z", 933 + "endDate": "2024-12-02T17:34:29.631Z", 934 + "logType": "WORKOUT" 935 + }, 936 + { 937 + "_links": { 938 + "self": { 939 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/4bb4081f-a729-4016-96c1-b837ae05100f" 940 + }, 941 + "user": { 942 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 943 + }, 944 + "template": { 945 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/328042b7-335e-4d61-8f3f-eaef8597d869" 946 + } 947 + }, 948 + "_embedded": { 949 + "cellSetGroup": [ 950 + { 951 + "_links": { 952 + "measurement": { 953 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a8121bda-a232-4da2-be80-85bbe05c53d7" 954 + } 955 + }, 956 + "_embedded": {}, 957 + "id": "6a0929b8-92e4-4c90-a62f-5b381fb2e9e0", 958 + "cellSets": [ 959 + { 960 + "id": "0257e08c-19b8-4e93-8554-293dc363c087", 961 + "cells": [ 962 + { 963 + "id": "1ba5deda-efb7-4b25-af7a-b1dd41eaf2c3", 964 + "cellType": "OTHER_WEIGHT", 965 + "value": "60" 966 + }, 967 + { 968 + "id": "ee38ccbb-bbbb-4d4b-adc9-bf33296b9807", 969 + "cellType": "REPS", 970 + "value": "10" 971 + } 972 + ], 973 + "isCompleted": true 974 + }, 975 + { 976 + "id": "cf5f0131-94bf-4a9c-ace3-3bb8972f4adb", 977 + "cells": [ 978 + { 979 + "id": "69071b3e-d5bf-4f60-99ab-0a369e626401", 980 + "cellType": "OTHER_WEIGHT", 981 + "value": "70" 982 + }, 983 + { 984 + "id": "36c1ea1c-8d84-489a-9a1e-6255a57cdbe2", 985 + "cellType": "REPS", 986 + "value": "10" 987 + } 988 + ], 989 + "isCompleted": true 990 + }, 991 + { 992 + "id": "3f7839ea-5fff-42bb-8444-74dfc4f51de5", 993 + "cells": [ 994 + { 995 + "id": "7ff3575a-4652-400b-8667-e0d46fe5c957", 996 + "cellType": "OTHER_WEIGHT", 997 + "value": "70" 998 + }, 999 + { 1000 + "id": "a503c8d4-1258-4fe8-bb08-e3ed48572346", 1001 + "cellType": "REPS", 1002 + "value": "10" 1003 + } 1004 + ], 1005 + "isCompleted": true 1006 + } 1007 + ] 1008 + }, 1009 + { 1010 + "_links": { 1011 + "measurement": { 1012 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/534954cb-6720-45c4-bf63-a0766142ec6c" 1013 + } 1014 + }, 1015 + "_embedded": {}, 1016 + "id": "e70476e1-98cc-4e11-a14e-8844c7f63daf", 1017 + "cellSets": [ 1018 + { 1019 + "id": "8700aad5-51cb-4a8c-abb6-2973aba37564", 1020 + "cells": [ 1021 + { 1022 + "id": "ce485bcb-e5ca-457e-b423-90294f25a44e", 1023 + "cellType": "OTHER_WEIGHT", 1024 + "value": "45" 1025 + }, 1026 + { 1027 + "id": "f7537b14-bfc1-4dfe-832f-177946b0fca5", 1028 + "cellType": "REPS", 1029 + "value": "11" 1030 + } 1031 + ], 1032 + "isCompleted": true 1033 + }, 1034 + { 1035 + "id": "1753dbe6-17c0-4920-8e57-2d6b4896ceda", 1036 + "cells": [ 1037 + { 1038 + "id": "19232167-6403-4698-a02f-a8b802f5a505", 1039 + "cellType": "OTHER_WEIGHT", 1040 + "value": "45" 1041 + }, 1042 + { 1043 + "id": "08855be9-f34e-466f-b650-af05f5515e3a", 1044 + "cellType": "REPS", 1045 + "value": "13" 1046 + } 1047 + ], 1048 + "isCompleted": true 1049 + }, 1050 + { 1051 + "id": "5bbcbb8e-3d79-4083-be39-7b21da17898e", 1052 + "cells": [ 1053 + { 1054 + "id": "77648148-c69c-4757-9d36-0af7cd7de881", 1055 + "cellType": "OTHER_WEIGHT", 1056 + "value": "45" 1057 + }, 1058 + { 1059 + "id": "8b6632e5-f50e-4e74-be4b-188696cb81da", 1060 + "cellType": "REPS", 1061 + "value": "11" 1062 + } 1063 + ], 1064 + "isCompleted": true 1065 + }, 1066 + { 1067 + "id": "4cf7eab9-061d-4cf5-9be0-3fbb3e4ce237", 1068 + "cells": [ 1069 + { 1070 + "id": "17df05c6-72e8-477b-83c1-9782dfa88de0", 1071 + "cellType": "OTHER_WEIGHT", 1072 + "value": "45" 1073 + }, 1074 + { 1075 + "id": "206f4e2f-70da-4fee-bf73-c0e91affd004", 1076 + "cellType": "REPS", 1077 + "value": "12" 1078 + } 1079 + ], 1080 + "isCompleted": true 1081 + } 1082 + ] 1083 + }, 1084 + { 1085 + "_links": { 1086 + "measurement": { 1087 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8dc8a29b-674b-43c9-bf6e-46b95f3414be" 1088 + } 1089 + }, 1090 + "_embedded": {}, 1091 + "id": "84aa0a48-17ce-4366-93d6-54571af8d6f9", 1092 + "cellSets": [ 1093 + { 1094 + "id": "6c8b3e7c-23f6-480a-be29-5db98593314e", 1095 + "cells": [ 1096 + { 1097 + "id": "5b949409-f265-48f6-a711-6ef9fb2e9522", 1098 + "cellType": "OTHER_WEIGHT", 1099 + "value": "30" 1100 + }, 1101 + { 1102 + "id": "899286bd-8fb9-467c-b89c-f7620f1b4092", 1103 + "cellType": "REPS", 1104 + "value": "17" 1105 + } 1106 + ], 1107 + "isCompleted": true 1108 + }, 1109 + { 1110 + "id": "f2f39079-f792-4cb8-b93d-f8865b3aa321", 1111 + "cells": [ 1112 + { 1113 + "id": "162f88ed-0673-4e1a-b9ac-4439832ef63e", 1114 + "cellType": "OTHER_WEIGHT", 1115 + "value": "35" 1116 + }, 1117 + { 1118 + "id": "8783966c-54d7-42bf-898f-9168c239f898", 1119 + "cellType": "REPS", 1120 + "value": "12" 1121 + } 1122 + ], 1123 + "isCompleted": true 1124 + }, 1125 + { 1126 + "id": "557dcbd2-c2f0-4628-a1d9-2f2781a9c7d2", 1127 + "cells": [ 1128 + { 1129 + "id": "3ee61e3e-2a09-4806-aec8-b97c76fbe547", 1130 + "cellType": "OTHER_WEIGHT", 1131 + "value": "35" 1132 + }, 1133 + { 1134 + "id": "ad370220-f3ae-475b-89b7-9128b21e52e1", 1135 + "cellType": "REPS", 1136 + "value": "8" 1137 + } 1138 + ], 1139 + "isCompleted": true 1140 + } 1141 + ] 1142 + }, 1143 + { 1144 + "_links": { 1145 + "measurement": { 1146 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4a304d9a-9a7a-440f-bb9a-9fd5cde6b590" 1147 + } 1148 + }, 1149 + "_embedded": {}, 1150 + "id": "6c91dbaa-4e4a-4a5a-b8df-462548349052", 1151 + "cellSets": [ 1152 + { 1153 + "id": "73dfd64f-551c-427e-88dd-0c68ce14a867", 1154 + "cells": [ 1155 + { 1156 + "id": "1e523a9c-844f-415b-b478-a0d7bbedff37", 1157 + "cellType": "OTHER_WEIGHT", 1158 + "value": "30" 1159 + }, 1160 + { 1161 + "id": "d8604549-874d-4fba-b719-09b9e673da44", 1162 + "cellType": "REPS", 1163 + "value": "8" 1164 + } 1165 + ], 1166 + "isCompleted": true 1167 + }, 1168 + { 1169 + "id": "2411035b-062c-4182-93cc-81b13c80a85e", 1170 + "cells": [ 1171 + { 1172 + "id": "eebe268d-2582-4f62-b552-1c7730a32fe4", 1173 + "cellType": "OTHER_WEIGHT", 1174 + "value": "25" 1175 + }, 1176 + { 1177 + "id": "89eba256-9767-4e52-a149-3ee4b1615a74", 1178 + "cellType": "REPS", 1179 + "value": "9" 1180 + } 1181 + ], 1182 + "isCompleted": true 1183 + }, 1184 + { 1185 + "id": "de56a498-3ec2-453a-9586-f577243ca76a", 1186 + "cells": [ 1187 + { 1188 + "id": "4ba6fff7-27e6-48de-b2d2-d16862c22887", 1189 + "cellType": "OTHER_WEIGHT", 1190 + "value": "25" 1191 + }, 1192 + { 1193 + "id": "1eb51a56-4ce8-4c55-81d0-e05969833fdd", 1194 + "cellType": "REPS", 1195 + "value": "5" 1196 + } 1197 + ], 1198 + "isCompleted": true 1199 + } 1200 + ] 1201 + }, 1202 + { 1203 + "_links": { 1204 + "measurement": { 1205 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4247db47-0f44-4314-851d-8ab4dce3317d" 1206 + } 1207 + }, 1208 + "_embedded": {}, 1209 + "id": "773b26ab-e0ec-4bed-8918-0a8b836953f1", 1210 + "cellSets": [ 1211 + { 1212 + "id": "865b901a-4ffe-44a6-854c-f7000c57f1e1", 1213 + "cells": [ 1214 + { 1215 + "id": "55efa196-71aa-496c-b99b-c1678e509bbf", 1216 + "cellType": "NOTE", 1217 + "value": "Just another note" 1218 + } 1219 + ], 1220 + "isCompleted": true 1221 + }, 1222 + { 1223 + "id": "93974c6f-d5dd-44d7-93e2-c9fb39aecf14", 1224 + "cells": [ 1225 + { 1226 + "id": "d21ebd2e-d084-4607-88a5-4d98abde2e34", 1227 + "cellType": "DUMBBELL_WEIGHT", 1228 + "value": "10" 1229 + }, 1230 + { 1231 + "id": "b6b2e75e-664b-404f-988f-49774d8eafa5", 1232 + "cellType": "REPS", 1233 + "value": "6" 1234 + } 1235 + ], 1236 + "isCompleted": true 1237 + }, 1238 + { 1239 + "id": "e0ac17e3-d74b-477a-a62c-f5fe81fb58ea", 1240 + "cells": [ 1241 + { 1242 + "id": "33880206-b0e6-4907-8c2e-600e24791567", 1243 + "cellType": "DUMBBELL_WEIGHT", 1244 + "value": "10" 1245 + }, 1246 + { 1247 + "id": "2668a579-818a-4f71-87fb-cd07de760dde", 1248 + "cellType": "REPS", 1249 + "value": "5" 1250 + } 1251 + ], 1252 + "isCompleted": true 1253 + }, 1254 + { 1255 + "id": "2bf1ec4f-fcbe-4fa7-8532-46daab17d5e6", 1256 + "cells": [ 1257 + { 1258 + "id": "b97f9883-e506-4cd4-8f63-f3226657ef35", 1259 + "cellType": "DUMBBELL_WEIGHT", 1260 + "value": "10" 1261 + }, 1262 + { 1263 + "id": "bb9b5c82-2c21-4734-8581-d26ee0fb26d6", 1264 + "cellType": "REPS", 1265 + "value": "3" 1266 + } 1267 + ], 1268 + "isCompleted": true 1269 + } 1270 + ] 1271 + } 1272 + ] 1273 + }, 1274 + "timezoneId": "Europe/Berlin", 1275 + "id": "4bb4081f-a729-4016-96c1-b837ae05100f", 1276 + "created": "2024-12-04T17:21:20.07Z", 1277 + "lastChanged": "2024-12-04T17:21:20.07Z", 1278 + "name": { 1279 + "en": "Bizeps/R\u00fccken" 1280 + }, 1281 + "access": "PRIVATE", 1282 + "startDate": "2024-12-04T16:23:43.965Z", 1283 + "endDate": "2024-12-04T17:21:20.423Z", 1284 + "logType": "WORKOUT" 1285 + }, 1286 + { 1287 + "_links": { 1288 + "self": { 1289 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/87148467-f4ef-47e2-acb1-7723bb017696" 1290 + }, 1291 + "user": { 1292 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 1293 + }, 1294 + "template": { 1295 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/fdfbc66d-6d9c-4cdd-a871-fe916d6368cd" 1296 + } 1297 + }, 1298 + "_embedded": { 1299 + "cellSetGroup": [ 1300 + { 1301 + "_links": {}, 1302 + "_embedded": {}, 1303 + "id": "89cc66f5-5096-4936-87eb-2218e3dfce3f", 1304 + "cellSets": [ 1305 + { 1306 + "id": "38d24d97-44ac-431b-b881-35904fffdc13", 1307 + "cells": [ 1308 + { 1309 + "id": "b5581ba5-3921-40d1-9a01-2cd02a7c8c25", 1310 + "cellType": "NOTE", 1311 + "value": "Just another note with an äöü" 1312 + } 1313 + ] 1314 + } 1315 + ] 1316 + }, 1317 + { 1318 + "_links": { 1319 + "measurement": { 1320 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 1321 + } 1322 + }, 1323 + "_embedded": {}, 1324 + "id": "9fa5af65-ee95-4c72-bd00-9358eaa11ef3", 1325 + "cellSets": [ 1326 + { 1327 + "id": "4cddae7c-736e-4bc8-b4ee-447635b4e8a9", 1328 + "cells": [ 1329 + { 1330 + "id": "5e42e9f1-ab3a-4220-ba12-ad2c9ef05f9b", 1331 + "cellType": "BARBELL_WEIGHT", 1332 + "value": "30" 1333 + }, 1334 + { 1335 + "id": "76c99bda-dd50-43b2-87a3-fc20bdaa9f53", 1336 + "cellType": "REPS", 1337 + "value": "16" 1338 + } 1339 + ], 1340 + "isCompleted": true 1341 + }, 1342 + { 1343 + "id": "a8d5a01e-dc1f-4c16-b304-a3c131176cc1", 1344 + "cells": [ 1345 + { 1346 + "id": "0bd69451-cca0-4262-a3bd-f40302e9f433", 1347 + "cellType": "BARBELL_WEIGHT", 1348 + "value": "40" 1349 + }, 1350 + { 1351 + "id": "27e43a94-ff52-437b-a09e-841c0154a4aa", 1352 + "cellType": "REPS", 1353 + "value": "12" 1354 + } 1355 + ], 1356 + "isCompleted": true 1357 + }, 1358 + { 1359 + "id": "cc69257b-ecf1-48a6-9f99-2ba157b63029", 1360 + "cells": [ 1361 + { 1362 + "id": "e5c8ac11-853d-4415-8f1b-383ef2b17fa6", 1363 + "cellType": "BARBELL_WEIGHT", 1364 + "value": "40" 1365 + }, 1366 + { 1367 + "id": "192ab958-337f-45a3-b294-ffd3a2c7404d", 1368 + "cellType": "REPS", 1369 + "value": "10" 1370 + } 1371 + ], 1372 + "isCompleted": true 1373 + }, 1374 + { 1375 + "id": "3600cc0c-02e5-4b3a-be8c-186f929aa83f", 1376 + "cells": [ 1377 + { 1378 + "id": "05ca5b9b-7c51-46f1-9b15-a357ff96f4ca", 1379 + "cellType": "BARBELL_WEIGHT", 1380 + "value": "40" 1381 + }, 1382 + { 1383 + "id": "0b8368cf-d4d8-491a-943d-d2b44765a92e", 1384 + "cellType": "REPS", 1385 + "value": "8" 1386 + } 1387 + ], 1388 + "isCompleted": true 1389 + } 1390 + ] 1391 + }, 1392 + { 1393 + "_links": { 1394 + "measurement": { 1395 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6ae27da7-92b9-4af9-b2a9-e0afd827c188" 1396 + } 1397 + }, 1398 + "_embedded": {}, 1399 + "id": "02ae7ea4-e5a3-4c1e-a4c8-8618dbebcdb8", 1400 + "cellSets": [ 1401 + { 1402 + "id": "31200602-1d6c-4de7-ad50-79ebb0beb8f4", 1403 + "cells": [ 1404 + { 1405 + "id": "0c8989db-a419-4592-9fcd-65d4d0d557d3", 1406 + "cellType": "OTHER_WEIGHT", 1407 + "value": "45" 1408 + }, 1409 + { 1410 + "id": "ead93fc0-f67f-487c-ac4b-2b3301e49f3b", 1411 + "cellType": "REPS", 1412 + "value": "12" 1413 + } 1414 + ], 1415 + "isCompleted": true 1416 + }, 1417 + { 1418 + "id": "0412c2c5-d59b-462d-beb3-9db4ec9fad4a", 1419 + "cells": [ 1420 + { 1421 + "id": "141c00d7-4fcd-49e9-9a26-9d19d6be17dc", 1422 + "cellType": "OTHER_WEIGHT", 1423 + "value": "45" 1424 + }, 1425 + { 1426 + "id": "b1a94e03-3797-4fa0-95b0-c9824fa2e3d0", 1427 + "cellType": "REPS", 1428 + "value": "7" 1429 + } 1430 + ], 1431 + "isCompleted": true 1432 + }, 1433 + { 1434 + "id": "96f0e257-1704-45e0-b298-50900339bbd9", 1435 + "cells": [ 1436 + { 1437 + "id": "392d8bc6-1fb4-4bdc-9ad8-f588285a196a", 1438 + "cellType": "OTHER_WEIGHT", 1439 + "value": "45" 1440 + }, 1441 + { 1442 + "id": "b2e04ec0-df73-4e9f-b697-705589091b61", 1443 + "cellType": "REPS", 1444 + "value": "10" 1445 + } 1446 + ], 1447 + "isCompleted": true 1448 + } 1449 + ] 1450 + }, 1451 + { 1452 + "_links": { 1453 + "measurement": { 1454 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a60fd1af-31d7-4235-92cd-57f76d1c39e9" 1455 + } 1456 + }, 1457 + "_embedded": {}, 1458 + "id": "b3221662-e5f2-4389-8870-4d68b013d538", 1459 + "cellSets": [ 1460 + { 1461 + "id": "822d28e6-285a-431f-ab59-9d98b50410db", 1462 + "cells": [ 1463 + { 1464 + "id": "f562bdbf-af2f-451e-9299-edebaac73e40", 1465 + "cellType": "OTHER_WEIGHT", 1466 + "value": "35" 1467 + }, 1468 + { 1469 + "id": "4bf07578-75cc-4391-8566-7ffe2910559c", 1470 + "cellType": "REPS", 1471 + "value": "10" 1472 + } 1473 + ], 1474 + "isCompleted": true 1475 + }, 1476 + { 1477 + "id": "96aa5450-08b9-48f8-99f4-6f11b3448b41", 1478 + "cells": [ 1479 + { 1480 + "id": "fed6d9e7-f7d8-493c-8f6f-d75a83ad34c2", 1481 + "cellType": "OTHER_WEIGHT", 1482 + "value": "35" 1483 + }, 1484 + { 1485 + "id": "215228ad-b0ab-4600-a5db-7ea5f7b24bd3", 1486 + "cellType": "REPS", 1487 + "value": "10" 1488 + } 1489 + ], 1490 + "isCompleted": true 1491 + }, 1492 + { 1493 + "id": "c827b58e-7139-418c-af2c-64d2273c933f", 1494 + "cells": [ 1495 + { 1496 + "id": "4c00fb12-bf15-4f92-85e5-19980a85b49a", 1497 + "cellType": "OTHER_WEIGHT", 1498 + "value": "35" 1499 + }, 1500 + { 1501 + "id": "9bd8bbb7-c417-4841-bff0-fe615a14609f", 1502 + "cellType": "REPS", 1503 + "value": "9" 1504 + } 1505 + ], 1506 + "isCompleted": true 1507 + } 1508 + ] 1509 + }, 1510 + { 1511 + "_links": { 1512 + "measurement": { 1513 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/737d7664-5231-44f9-a112-a4c087f67675" 1514 + } 1515 + }, 1516 + "_embedded": {}, 1517 + "id": "fa237632-6633-4613-ab1c-c8583a2a4ca1", 1518 + "cellSets": [ 1519 + { 1520 + "id": "0167b71b-5b00-4d54-8a6a-6ca4e761a6f3", 1521 + "cells": [ 1522 + { 1523 + "id": "cac35535-1702-4957-8175-cef5e1ccc43e", 1524 + "cellType": "DUMBBELL_WEIGHT", 1525 + "value": "14" 1526 + }, 1527 + { 1528 + "id": "54b9aa98-ac66-4d32-837e-5123140a3f51", 1529 + "cellType": "REPS", 1530 + "value": "8" 1531 + } 1532 + ], 1533 + "isCompleted": true 1534 + }, 1535 + { 1536 + "id": "b3e8ec7f-3559-41be-a976-ca95f741406c", 1537 + "cells": [ 1538 + { 1539 + "id": "ede29848-ef2a-4517-8aad-acbcc623567b", 1540 + "cellType": "DUMBBELL_WEIGHT", 1541 + "value": "14" 1542 + }, 1543 + { 1544 + "id": "1caf3739-2d91-467a-b591-72c6799fcac8", 1545 + "cellType": "REPS", 1546 + "value": "8" 1547 + } 1548 + ], 1549 + "isCompleted": true 1550 + }, 1551 + { 1552 + "id": "d181f550-3e7e-4991-9e8d-55c8232e0b34", 1553 + "cells": [ 1554 + { 1555 + "id": "d31d09ad-92de-43cd-8ab0-92c5ac951b2a", 1556 + "cellType": "DUMBBELL_WEIGHT", 1557 + "value": "7" 1558 + }, 1559 + { 1560 + "id": "b3a4414e-d27c-4240-b272-f1c8587e7e66", 1561 + "cellType": "REPS", 1562 + "value": "7" 1563 + } 1564 + ], 1565 + "isCompleted": true 1566 + } 1567 + ] 1568 + }, 1569 + { 1570 + "_links": { 1571 + "measurement": { 1572 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/91efd24a-9acc-40dd-8f7f-16a1ab175f33" 1573 + } 1574 + }, 1575 + "_embedded": {}, 1576 + "id": "9cf26159-2a11-437c-9574-a500e5e8975c", 1577 + "cellSets": [ 1578 + { 1579 + "id": "68100dcc-b5b0-4308-bccf-e3878bff02be", 1580 + "cells": [ 1581 + { 1582 + "id": "b59d4244-4817-4714-9760-fa4911d96331", 1583 + "cellType": "BARBELL_WEIGHT", 1584 + "value": "35" 1585 + }, 1586 + { 1587 + "id": "43868e06-badd-4f32-a82d-3350aa1e351d", 1588 + "cellType": "REPS", 1589 + "value": "15" 1590 + } 1591 + ], 1592 + "isCompleted": true 1593 + }, 1594 + { 1595 + "id": "be5f5f06-8e8f-4bb1-92d8-f44ec6d34f60", 1596 + "cells": [ 1597 + { 1598 + "id": "c2d1b0c0-b699-4c03-b689-5abfa6ce57d5", 1599 + "cellType": "BARBELL_WEIGHT", 1600 + "value": "40" 1601 + }, 1602 + { 1603 + "id": "6f2c3db6-4e79-4651-ba76-563de07a13d4", 1604 + "cellType": "REPS", 1605 + "value": "10" 1606 + } 1607 + ], 1608 + "isCompleted": true 1609 + }, 1610 + { 1611 + "id": "60246caa-a0e3-4edb-9526-a3f79a4fcab8", 1612 + "cells": [ 1613 + { 1614 + "id": "ae00c458-69b5-4c2a-8af9-94a2d2726683", 1615 + "cellType": "BARBELL_WEIGHT", 1616 + "value": "40" 1617 + }, 1618 + { 1619 + "id": "b0c6e220-8970-491b-9385-f27fe2350f33", 1620 + "cellType": "REPS", 1621 + "value": "11" 1622 + } 1623 + ], 1624 + "isCompleted": true 1625 + } 1626 + ] 1627 + } 1628 + ] 1629 + }, 1630 + "timezoneId": "Europe/Berlin", 1631 + "id": "87148467-f4ef-47e2-acb1-7723bb017696", 1632 + "created": "2024-12-06T17:46:59.597Z", 1633 + "lastChanged": "2024-12-06T17:46:59.597Z", 1634 + "name": { 1635 + "en": "Brust/Trizeps" 1636 + }, 1637 + "access": "PRIVATE", 1638 + "startDate": "2024-12-06T16:42:10.814Z", 1639 + "endDate": "2024-12-06T17:47:00.064Z", 1640 + "logType": "WORKOUT" 1641 + }, 1642 + { 1643 + "_links": { 1644 + "self": { 1645 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/7879b074-96a9-4685-9dc8-9295940db188" 1646 + }, 1647 + "user": { 1648 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 1649 + }, 1650 + "template": { 1651 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/fdfbc66d-6d9c-4cdd-a871-fe916d6368cd" 1652 + } 1653 + }, 1654 + "_embedded": { 1655 + "cellSetGroup": [ 1656 + { 1657 + "_links": {}, 1658 + "_embedded": {}, 1659 + "id": "c7c01c65-18ec-41ab-90d2-dda46f23e131", 1660 + "cellSets": [ 1661 + { 1662 + "id": "ab544bf7-429c-4158-bef5-47e07baae81c", 1663 + "cells": [ 1664 + { 1665 + "id": "6672ae5a-1816-4e5b-ae92-f9b2e45205ca", 1666 + "cellType": "NOTE", 1667 + "value": "yet another note" 1668 + } 1669 + ] 1670 + } 1671 + ] 1672 + }, 1673 + { 1674 + "_links": { 1675 + "measurement": { 1676 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 1677 + } 1678 + }, 1679 + "_embedded": {}, 1680 + "id": "95e2213a-3011-486d-afa1-c0ede9925e5f", 1681 + "cellSets": [ 1682 + { 1683 + "id": "5d60e5c3-4b77-410d-b6b3-5cbb00b9539f", 1684 + "cells": [ 1685 + { 1686 + "id": "967c86cc-a672-446f-b722-2629295b8b81", 1687 + "cellType": "BARBELL_WEIGHT", 1688 + "value": "40" 1689 + }, 1690 + { 1691 + "id": "bc12fefb-3162-468d-99e0-dae783453a33", 1692 + "cellType": "REPS", 1693 + "value": "13" 1694 + } 1695 + ], 1696 + "isCompleted": true 1697 + }, 1698 + { 1699 + "id": "a2f282d8-9fb4-4b22-918f-6dd7361f94dd", 1700 + "cells": [ 1701 + { 1702 + "id": "58cea82d-6f10-4190-a2c9-a0694576d200", 1703 + "cellType": "BARBELL_WEIGHT", 1704 + "value": "40" 1705 + }, 1706 + { 1707 + "id": "050ab309-c2d7-4567-805d-86d281199b6f", 1708 + "cellType": "REPS", 1709 + "value": "10" 1710 + } 1711 + ], 1712 + "isCompleted": true 1713 + }, 1714 + { 1715 + "id": "8fc2ad23-7040-43c9-907c-c699309c5cff", 1716 + "cells": [ 1717 + { 1718 + "id": "a1c28638-ec92-4d73-84a8-1462cb88e6d2", 1719 + "cellType": "BARBELL_WEIGHT", 1720 + "value": "40" 1721 + }, 1722 + { 1723 + "id": "3abf3c9d-e804-443a-8051-49f5febfb388", 1724 + "cellType": "REPS", 1725 + "value": "7" 1726 + } 1727 + ], 1728 + "isCompleted": true 1729 + } 1730 + ] 1731 + }, 1732 + { 1733 + "_links": { 1734 + "measurement": { 1735 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6ae27da7-92b9-4af9-b2a9-e0afd827c188" 1736 + } 1737 + }, 1738 + "_embedded": {}, 1739 + "id": "682fe54e-cf92-4196-8f70-38c11f914d87", 1740 + "cellSets": [ 1741 + { 1742 + "id": "903b92b4-b848-4f6a-8a83-c678965cc121", 1743 + "cells": [ 1744 + { 1745 + "id": "c0d05362-9bad-4e10-b3b1-37cc61b1ea4a", 1746 + "cellType": "OTHER_WEIGHT", 1747 + "value": "45" 1748 + }, 1749 + { 1750 + "id": "d7626e88-4acc-4400-8072-fe83f256b99c", 1751 + "cellType": "REPS", 1752 + "value": "4" 1753 + } 1754 + ], 1755 + "isCompleted": true 1756 + }, 1757 + { 1758 + "id": "eabbb5a3-5461-4228-81cc-5acc1beb7489", 1759 + "cells": [ 1760 + { 1761 + "id": "7923c26a-8075-4ad4-b7ab-3946737f5b72", 1762 + "cellType": "OTHER_WEIGHT", 1763 + "value": "45" 1764 + }, 1765 + { 1766 + "id": "33dee2a0-56d3-49e0-8069-7011b888ef2d", 1767 + "cellType": "REPS", 1768 + "value": "12" 1769 + } 1770 + ], 1771 + "isCompleted": true 1772 + }, 1773 + { 1774 + "id": "45e2194f-8c6d-4e82-9863-112a90b1ddbd", 1775 + "cells": [ 1776 + { 1777 + "id": "712197c9-192a-47c0-8c2a-409f8844475d", 1778 + "cellType": "OTHER_WEIGHT", 1779 + "value": "45" 1780 + }, 1781 + { 1782 + "id": "3d4ac142-181a-4f48-98e9-1a458af88605", 1783 + "cellType": "REPS", 1784 + "value": "11" 1785 + } 1786 + ], 1787 + "isCompleted": true 1788 + } 1789 + ] 1790 + }, 1791 + { 1792 + "_links": { 1793 + "measurement": { 1794 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a60fd1af-31d7-4235-92cd-57f76d1c39e9" 1795 + } 1796 + }, 1797 + "_embedded": {}, 1798 + "id": "11eaeda1-1d73-4873-b731-6d96efdacbf4", 1799 + "cellSets": [ 1800 + { 1801 + "id": "3c551b9c-5982-4b8f-b490-3767bbd4e129", 1802 + "cells": [ 1803 + { 1804 + "id": "0446bfcc-517f-462b-93fe-371c5e5cee9d", 1805 + "cellType": "OTHER_WEIGHT", 1806 + "value": "35" 1807 + }, 1808 + { 1809 + "id": "62d23a5d-2396-4ca9-9a37-d196384bc39a", 1810 + "cellType": "REPS", 1811 + "value": "11" 1812 + } 1813 + ], 1814 + "isCompleted": true 1815 + }, 1816 + { 1817 + "id": "5e6e701b-b1ad-4c24-995b-70666835bad2", 1818 + "cells": [ 1819 + { 1820 + "id": "d1be40df-7b76-40d6-8fda-344ef48342bc", 1821 + "cellType": "OTHER_WEIGHT", 1822 + "value": "35" 1823 + }, 1824 + { 1825 + "id": "7166a12c-9402-4777-ac69-3d1db680875e", 1826 + "cellType": "REPS", 1827 + "value": "12" 1828 + } 1829 + ], 1830 + "isCompleted": true 1831 + }, 1832 + { 1833 + "id": "28f80d2e-e2c2-41eb-9494-f99a6898e8b4", 1834 + "cells": [ 1835 + { 1836 + "id": "d0f67027-1ccb-4536-8a29-fc3b50f10fdd", 1837 + "cellType": "OTHER_WEIGHT", 1838 + "value": "35" 1839 + }, 1840 + { 1841 + "id": "4a6e0f2d-10fe-44b5-ac62-987aea03f47c", 1842 + "cellType": "REPS", 1843 + "value": "9" 1844 + } 1845 + ], 1846 + "isCompleted": true 1847 + } 1848 + ] 1849 + }, 1850 + { 1851 + "_links": { 1852 + "measurement": { 1853 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/91efd24a-9acc-40dd-8f7f-16a1ab175f33" 1854 + } 1855 + }, 1856 + "_embedded": {}, 1857 + "id": "f94b29f3-60cb-4cba-ac45-3f6d68661466", 1858 + "cellSets": [ 1859 + { 1860 + "id": "7fbc4352-ee80-43e7-aaa8-ec463f879e50", 1861 + "cells": [ 1862 + { 1863 + "id": "dca0eb19-95ef-4ab4-9e9f-15111fe9f907", 1864 + "cellType": "BARBELL_WEIGHT", 1865 + "value": "40" 1866 + }, 1867 + { 1868 + "id": "24ff2fc2-be57-48e1-af91-9ed304e125db", 1869 + "cellType": "REPS", 1870 + "value": "16" 1871 + } 1872 + ], 1873 + "isCompleted": true 1874 + }, 1875 + { 1876 + "id": "c8a985c9-f107-49b9-bd3b-b490d157fd42", 1877 + "cells": [ 1878 + { 1879 + "id": "53229c4d-ec7f-48f2-9252-baa852b8d938", 1880 + "cellType": "BARBELL_WEIGHT", 1881 + "value": "40" 1882 + }, 1883 + { 1884 + "id": "45482d60-9f92-4719-8d79-b3a186f2a55e", 1885 + "cellType": "REPS", 1886 + "value": "14" 1887 + } 1888 + ], 1889 + "isCompleted": true 1890 + }, 1891 + { 1892 + "id": "cc7773b5-9830-4496-8db9-f63d336466e9", 1893 + "cells": [ 1894 + { 1895 + "id": "5bfa8d3c-4e21-4e29-ae89-ce5e5d0c4c25", 1896 + "cellType": "BARBELL_WEIGHT", 1897 + "value": "45" 1898 + }, 1899 + { 1900 + "id": "6822d48f-562b-4746-81dd-439fd5a5eacd", 1901 + "cellType": "REPS", 1902 + "value": "11" 1903 + } 1904 + ], 1905 + "isCompleted": true 1906 + } 1907 + ] 1908 + } 1909 + ] 1910 + }, 1911 + "timezoneId": "Europe/Berlin", 1912 + "id": "7879b074-96a9-4685-9dc8-9295940db188", 1913 + "created": "2024-12-11T17:19:58.997Z", 1914 + "lastChanged": "2024-12-11T17:19:58.997Z", 1915 + "name": { 1916 + "en": "Brust/Trizeps" 1917 + }, 1918 + "access": "PRIVATE", 1919 + "startDate": "2024-12-11T16:32:33.394Z", 1920 + "endDate": "2024-12-11T17:19:59.5Z", 1921 + "logType": "WORKOUT" 1922 + } 1923 + ] 1924 + }, 1925 + "id": "0f518518-5180-4518-b518-51b51851b518", 1926 + "created": "2024-10-20T21:58:21.527Z", 1927 + "lastChanged": "2026-01-23T10:09:19.407Z", 1928 + "username": "my-username", 1929 + "email": "spam@returnnull.de", 1930 + "emailVerified": true, 1931 + "name": " V.", 1932 + "avatar": { 1933 + "url": "https://files.strong.app/users/0f518518-5180-4518-b518-51b51851b518/74f8855c-52c9-466b-8229-46021d7553ae.jpg", 1934 + "contentType": "image/jpeg" 1935 + }, 1936 + "preferences": { 1937 + "weightUnit": { 1938 + "0f518518-5180-4518-b518-51b51851b518": "KILOGRAMS" 1939 + }, 1940 + "distanceUnit": { 1941 + "0f518518-5180-4518-b518-51b51851b518": "KILOMETERS" 1942 + }, 1943 + "restTimer": { 1944 + "0f518518-5180-4518-b518-51b51851b518": 120, 1945 + "ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6": 120 1946 + }, 1947 + "warmupRestTimer": { 1948 + "ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6": 0 1949 + }, 1950 + "supersetRestTimer": {}, 1951 + "dropSetRestTimer": { 1952 + "0f518518-5180-4518-b518-51b51851b518": 10, 1953 + "ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6": 0 1954 + }, 1955 + "baseWeight": {}, 1956 + "barType": { 1957 + "8951200e-5791-4885-bee1-cacac5d08c77": "NONE", 1958 + "e676f31d-5fa2-4a61-bed6-af0ff6c17c77": "NONE", 1959 + "c8fc2454-6b09-4e28-a762-397cca489fd2": "NONE", 1960 + "55afec19-d074-4083-a554-085f533b62ce": "NONE", 1961 + "a61773eb-580a-448f-9b03-90aeb3c7c83d": "NONE", 1962 + "4a304d9a-9a7a-440f-bb9a-9fd5cde6b590": "NONE", 1963 + "fbd89dfb-0de7-4808-86d7-979d6f35126a": "NONE", 1964 + "75c0cf08-e391-466c-83c5-565d1b278244": "NONE", 1965 + "bb94b95b-ecb0-4b90-94e3-8f6e557f774b": "NONE", 1966 + "a8eb5de6-5b77-4e81-adab-0835729506c7": "NONE", 1967 + "a60fd1af-31d7-4235-92cd-57f76d1c39e9": "NONE", 1968 + "b92aa3dd-98e1-4e99-a229-434be54c1ae5": "NONE", 1969 + "4a8de470-a971-45db-830e-5f4b28db0894": "NONE", 1970 + "143f848f-3a01-40bd-88d1-613c3a88309e": "NONE", 1971 + "0abcf1b6-58f6-4ec9-be63-32bd5c3cfd33": "NONE", 1972 + "231a78da-13dc-441d-ac31-03d5730e8168": "NONE", 1973 + "b8b33683-ce46-4392-8be5-207fe8e605bd": "NONE", 1974 + "d3f21789-0e0c-4c2a-a633-3617f383a11d": "NONE", 1975 + "b0c8a069-aae9-40d4-b842-a61a3c7cacde": "NONE", 1976 + "312f0076-00f8-47a4-9365-38c80b99cb91": "NONE", 1977 + "70709ccd-1f01-4725-98ad-193d2004babf": "NONE", 1978 + "93d038a6-92fc-484d-a948-9fad070ff5b1": "NONE", 1979 + "88b0165c-0c7c-423a-949d-0171baa354c2": "NONE", 1980 + "8dc8a29b-674b-43c9-bf6e-46b95f3414be": "NONE", 1981 + "99afdf73-0e2f-4f2d-a10d-90299196b0db": "NONE", 1982 + "7d1df88e-8610-495b-83a3-d68aabbfee8a": "NONE", 1983 + "3718fbd6-a0e5-4d56-bb92-10feb3600156": "NONE", 1984 + "933a3dbf-b9c2-40f9-852f-cd2b26dd9eb1": "NONE", 1985 + "aa185f9c-9341-4260-b007-593e9b74db10": "NONE", 1986 + "fe4e5949-5f51-4c60-a31f-b45bd9ad8023": "NONE", 1987 + "f12e2a9b-02ea-4d38-9127-aa6234786d3a": "NONE", 1988 + "b2f5a8c1-b66a-4b4f-8f2a-72fbf578d943": "NONE", 1989 + "04e2090c-a84e-47a1-81c5-55103b28ed2f": "NONE", 1990 + "213bd3ef-1207-4fd8-acdd-cb224a8b42a7": "NONE", 1991 + "a467f043-c96e-43c8-9133-a33eb8e62ded": "NONE", 1992 + "980cb0df-4ef3-4af7-9333-48ee9f3943ce": "NONE", 1993 + "6ae27da7-92b9-4af9-b2a9-e0afd827c188": "NONE", 1994 + "b101465f-bec5-40cd-9434-0d832e5c655e": "NONE", 1995 + "b292faa1-44cf-4aa3-9670-43200c2d1832": "NONE", 1996 + "1edc86ac-5c4a-46b4-a29b-04141141ff6b": "NONE", 1997 + "819a0ba2-0a52-41f9-81dc-8f00c1f5a55d": "NONE", 1998 + "f33643ea-6cc0-4966-8b1a-b87696015072": "NONE", 1999 + "14263e88-13d4-4582-9b18-423a36631645": "NONE", 2000 + "9000fcaf-155a-410e-b774-ee1dce73b62d": "NONE", 2001 + "45fbc14c-584e-473f-81f3-14ad422906be": "NONE", 2002 + "79a42fc3-5363-48d7-9fba-8e643d50bbd4": "NONE", 2003 + "0373b862-bde8-4335-ab03-763cca57455c": "NONE", 2004 + "a8121bda-a232-4da2-be80-85bbe05c53d7": "NONE", 2005 + "59bb3ebb-acab-426b-aedf-6149b8ef9100": "NONE", 2006 + "caa35db9-e106-4915-840c-e7205f6e7228": "NONE", 2007 + "42695e60-4dd7-41a0-8233-c26b1fe24e6e": "NONE", 2008 + "d53099b7-31f3-41fa-99e2-72fdf47c4503": "NONE", 2009 + "247fe479-b90c-40a3-baf1-07f3c05ed014": "NONE", 2010 + "6102ebdd-f375-4cdb-8f3e-b50fbe0086ef": "NONE", 2011 + "e6cb00c6-1460-4440-9c19-7fd6f4badf8d": "NONE", 2012 + "b710665a-f88e-4d31-99bf-5ecb7b5f6500": "NONE", 2013 + "65e1c38c-2013-40df-9d57-716a7f7f71e1": "NONE", 2014 + "0973c5dd-5b62-4e9e-a15e-114cb94f440d": "NONE", 2015 + "f31e19c8-1671-40e4-9089-e341fffe7751": "NONE", 2016 + "b45be635-5eac-4d46-8071-607c1b1834cc": "NONE", 2017 + "21ddb847-98cd-4f6c-bea5-1df51163973d": "NONE", 2018 + "c9ef4e7a-2bec-41b1-8e62-b68dc6d81fb2": "NONE", 2019 + "487e8b08-458f-43da-a9f6-e339c8d548a9": "NONE", 2020 + "091ba495-1623-4578-95f0-5bd1aeebf3e9": "NONE", 2021 + "bad7dcc2-fac7-4ec8-8c03-1ec6bb471069": "NONE", 2022 + "4b8c9374-ab32-4912-906a-202ef1b20ea6": "NONE", 2023 + "f21ec917-6402-4938-8103-128fd49d13aa": "NONE", 2024 + "7f6f4c96-4893-4f40-a7f4-2baf53cb3d04": "NONE", 2025 + "b1c68d18-cdc5-466a-96ea-c233473541dc": "NONE", 2026 + "534954cb-6720-45c4-bf63-a0766142ec6c": "NONE", 2027 + "56f23487-1b65-4d4e-bcba-9d7a424110ef": "NONE", 2028 + "a3f1d57d-da0e-466d-a691-c03695d39418": "NONE", 2029 + "a1b1a1cb-dacc-4d18-bf62-95d597db6715": "NONE", 2030 + "74a43a3f-5e0b-43c8-953e-f7e9c7d72986": "NONE", 2031 + "3e15b3fa-bd04-49ff-a622-633208a2d5df": "NONE", 2032 + "ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6": "OLYMPIC_BAR" 2033 + }, 2034 + "autoStartRestTimer": {}, 2035 + "availablePlates": { 2036 + "0f518518-5180-4518-b518-51b51851b518": [ 2037 + "PLATE_20KG", 2038 + "PLATE_10KG", 2039 + "PLATE_5KG", 2040 + "PLATE_2_5KG", 2041 + "PLATE_1_25KG" 2042 + ] 2043 + }, 2044 + "lengthUnit": { 2045 + "0f518518-5180-4518-b518-51b51851b518": "CENTIMETERS" 2046 + }, 2047 + "resistanceWeightUnit": { 2048 + "0f518518-5180-4518-b518-51b51851b518": "KILOGRAMS" 2049 + }, 2050 + "restTimerIncrementValue": { 2051 + "0f518518-5180-4518-b518-51b51851b518": 5 2052 + } 2053 + }, 2054 + "purchases": [ 2055 + { 2056 + "purchaseId": "legacy", 2057 + "expiryTime": "2069-04-20T13:37:00.002Z", 2058 + "autoRenewing": false, 2059 + "sku": "legacy", 2060 + "source": "LEGACY", 2061 + "paymentState": "UNDEFINED" 2062 + } 2063 + ], 2064 + "legacyPurchase": { 2065 + "upgrades": [], 2066 + "proExpirationDate": "2069-04-20T13:37:00.002Z" 2067 + }, 2068 + "legacyGoals": { 2069 + "workoutsPerWeek": 3 2070 + }, 2071 + "legacyCustomBarTypes": [ 2072 + { 2073 + "legacyCustomBarTypeId": "c911c5bf-8747-49bb-bb04-a32fec541ccf", 2074 + "name": "SZ-Stange", 2075 + "weightInKilograms": 10.0, 2076 + "weightInPounds": 22.05 2077 + } 2078 + ], 2079 + "startHistoryFromDate": "1970-01-01T00:00:00Z", 2080 + "firstWeekDay": "MONDAY", 2081 + "availableLogins": [ 2082 + { 2083 + "provider": "Password", 2084 + "name": "Tolik", 2085 + "email": "spam@returnnull.de" 2086 + }, 2087 + { 2088 + "provider": "Google", 2089 + "name": "Tolik", 2090 + "email": "spam@returnnull.de" 2091 + } 2092 + ], 2093 + "migrated": "2024-12-21T15:53:30.376Z" 2094 + }
+4580
strong-api-lib/tests/fixtures/user_response_all_includes.json
··· 1 + { 2 + "_links": { 3 + "self": { 4 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 5 + }, 6 + "folders": { 7 + "href": "/api/folders/0f518518-5180-4518-b518-51b51851b518" 8 + }, 9 + "folder": { 10 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/folders/{id}", 11 + "templated": true 12 + }, 13 + "measurements": { 14 + "href": "/api/measurements/0f518518-5180-4518-b518-51b51851b518" 15 + }, 16 + "measurement": { 17 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/{id}", 18 + "templated": true 19 + }, 20 + "measuredValues": { 21 + "href": "/api/measuredvalues/0f518518-5180-4518-b518-51b51851b518" 22 + }, 23 + "measuredValue": { 24 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measuredvalues/{id}", 25 + "templated": true 26 + }, 27 + "templates": { 28 + "href": "/api/templates/0f518518-5180-4518-b518-51b51851b518" 29 + }, 30 + "template": { 31 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/{id}", 32 + "templated": true 33 + }, 34 + "metrics": { 35 + "href": "/api/metrics/0f518518-5180-4518-b518-51b51851b518" 36 + }, 37 + "metric": { 38 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/metrics/{id}", 39 + "templated": true 40 + }, 41 + "metricCaches": { 42 + "href": "/api/metriccaches/0f518518-5180-4518-b518-51b51851b518" 43 + }, 44 + "metricCache": { 45 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/metriccaches/{id}", 46 + "templated": true 47 + }, 48 + "logs": { 49 + "href": "/api/logs/0f518518-5180-4518-b518-51b51851b518" 50 + }, 51 + "log": { 52 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/{id}", 53 + "templated": true 54 + }, 55 + "tags": { 56 + "href": "/api/tags/0f518518-5180-4518-b518-51b51851b518" 57 + }, 58 + "tag": { 59 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/{id}", 60 + "templated": true 61 + }, 62 + "widgets": { 63 + "href": "/api/widgets/0f518518-5180-4518-b518-51b51851b518" 64 + }, 65 + "widget": { 66 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/widgets/{id}", 67 + "templated": true 68 + }, 69 + "next": { 70 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518?include=log&include=measurement&include=tag&include=template&include=folder&include=widget&include=measuredValue&continuation=ARXq6MgWOgQA-JlAPuM5CADUof36HzoYAJeC-TjjORwA1aH9-h86AAISF5wiGDogANWh_fofOgw&limit=5" 71 + } 72 + }, 73 + "_embedded": { 74 + "measurement": [ 75 + { 76 + "_links": { 77 + "self": { 78 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6de1b274-f023-49f2-94ec-add08373b7e4" 79 + }, 80 + "user": { 81 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 82 + }, 83 + "tag": [ 84 + { 85 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 86 + } 87 + ] 88 + }, 89 + "id": "6de1b274-f023-49f2-94ec-add08373b7e4", 90 + "created": "2016-02-19T05:42:36.756Z", 91 + "lastChanged": "2017-12-06T13:45:30.693Z", 92 + "name": { 93 + "en": "Yoga" 94 + }, 95 + "media": [], 96 + "cellTypeConfigs": [ 97 + { 98 + "cellType": "DURATION", 99 + "mandatory": true 100 + } 101 + ], 102 + "isGlobal": true, 103 + "measurementType": "EXERCISE" 104 + }, 105 + { 106 + "_links": { 107 + "self": { 108 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/0ea248ec-76d2-47b1-aba5-c35160a3236f" 109 + }, 110 + "user": { 111 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 112 + }, 113 + "tag": [ 114 + { 115 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 116 + } 117 + ] 118 + }, 119 + "id": "0ea248ec-76d2-47b1-aba5-c35160a3236f", 120 + "created": "2016-02-19T05:42:35.179Z", 121 + "lastChanged": "2017-12-06T13:45:43.206Z", 122 + "name": { 123 + "en": "Climbing" 124 + }, 125 + "media": [], 126 + "cellTypeConfigs": [ 127 + { 128 + "cellType": "DURATION", 129 + "mandatory": true 130 + } 131 + ], 132 + "isGlobal": true, 133 + "measurementType": "EXERCISE" 134 + }, 135 + { 136 + "_links": { 137 + "self": { 138 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/05aa6d82-6388-4c3d-87a5-8d8edc1b3431" 139 + }, 140 + "user": { 141 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 142 + }, 143 + "tag": [ 144 + { 145 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 146 + } 147 + ] 148 + }, 149 + "id": "05aa6d82-6388-4c3d-87a5-8d8edc1b3431", 150 + "created": "2016-02-19T05:42:35.172Z", 151 + "lastChanged": "2017-12-06T13:45:56.587Z", 152 + "name": { 153 + "en": "Aerobics" 154 + }, 155 + "media": [], 156 + "cellTypeConfigs": [ 157 + { 158 + "cellType": "DURATION", 159 + "mandatory": true 160 + } 161 + ], 162 + "isGlobal": true, 163 + "measurementType": "EXERCISE" 164 + }, 165 + { 166 + "_links": { 167 + "self": { 168 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a8225200-79fb-4131-8ea2-c4df95f56c77" 169 + }, 170 + "user": { 171 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 172 + }, 173 + "tag": [ 174 + { 175 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 176 + } 177 + ] 178 + }, 179 + "id": "a8225200-79fb-4131-8ea2-c4df95f56c77", 180 + "created": "2016-02-19T05:42:35.16Z", 181 + "lastChanged": "2017-12-06T13:46:14.551Z", 182 + "name": { 183 + "en": "Swimming" 184 + }, 185 + "media": [], 186 + "cellTypeConfigs": [ 187 + { 188 + "cellType": "DISTANCE" 189 + }, 190 + { 191 + "cellType": "DURATION" 192 + } 193 + ], 194 + "isGlobal": true, 195 + "measurementType": "EXERCISE" 196 + }, 197 + { 198 + "_links": { 199 + "self": { 200 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/95aef7e7-e232-4442-851e-2231e7b54317" 201 + }, 202 + "user": { 203 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 204 + }, 205 + "tag": [ 206 + { 207 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 208 + } 209 + ] 210 + }, 211 + "id": "95aef7e7-e232-4442-851e-2231e7b54317", 212 + "created": "2016-02-19T05:42:35.155Z", 213 + "lastChanged": "2017-12-06T13:46:17.704Z", 214 + "name": { 215 + "en": "Skating" 216 + }, 217 + "media": [], 218 + "cellTypeConfigs": [ 219 + { 220 + "cellType": "DISTANCE" 221 + }, 222 + { 223 + "cellType": "DURATION" 224 + } 225 + ], 226 + "isGlobal": true, 227 + "measurementType": "EXERCISE" 228 + } 229 + ], 230 + "measuredValue": [], 231 + "template": [ 232 + { 233 + "_links": { 234 + "self": { 235 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/dd0a1356-7f3b-45b2-a2ef-1dd6fc0b245a" 236 + }, 237 + "user": { 238 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 239 + }, 240 + "folder": [ 241 + { 242 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/folders/example-templates" 243 + } 244 + ] 245 + }, 246 + "_embedded": { 247 + "cellSetGroup": [ 248 + { 249 + "_links": { 250 + "measurement": { 251 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 252 + } 253 + }, 254 + "_embedded": {}, 255 + "id": "291a1442-658a-454d-a912-3398e1e785a0", 256 + "cellSets": [ 257 + { 258 + "id": "9b24e4f1-e2b9-4f92-9a39-df7b97a5d8c6", 259 + "cells": [ 260 + { 261 + "id": "50bcad3e-16f2-40cd-82a4-04508165781a", 262 + "cellType": "BARBELL_WEIGHT" 263 + }, 264 + { 265 + "id": "2aba4c01-a98e-4c23-9d95-36516938d7c5", 266 + "cellType": "REPS", 267 + "value": "10" 268 + } 269 + ], 270 + "isCompleted": false 271 + }, 272 + { 273 + "id": "3c3212eb-865a-478a-9e1c-abd168f48d72", 274 + "cells": [ 275 + { 276 + "id": "70b4c175-c75c-4479-91c3-788357c1da2c", 277 + "cellType": "BARBELL_WEIGHT" 278 + }, 279 + { 280 + "id": "b75496d1-c11c-49dc-bf2b-e6f0ac1d1bee", 281 + "cellType": "REPS", 282 + "value": "10" 283 + } 284 + ], 285 + "isCompleted": false 286 + }, 287 + { 288 + "id": "875d6be7-01e7-489e-bbc2-c483e424972c", 289 + "cells": [ 290 + { 291 + "id": "66404b02-b9c7-440d-a3c5-17e55685ea91", 292 + "cellType": "BARBELL_WEIGHT" 293 + }, 294 + { 295 + "id": "25ba73ca-0707-4f07-991e-8615ee2b6956", 296 + "cellType": "REPS", 297 + "value": "10" 298 + } 299 + ], 300 + "isCompleted": false 301 + } 302 + ] 303 + }, 304 + { 305 + "_links": { 306 + "measurement": { 307 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/63d3c1b2-26b5-49bc-9ed9-3ea000e5768d" 308 + } 309 + }, 310 + "_embedded": {}, 311 + "id": "179533a6-db42-4d71-89a0-5acadae6692b", 312 + "cellSets": [ 313 + { 314 + "id": "668230b2-0374-4710-b6b8-121a5a6f5453", 315 + "cells": [ 316 + { 317 + "id": "561fa1a2-326e-426c-a439-15ccdf7babbb", 318 + "cellType": "BARBELL_WEIGHT" 319 + }, 320 + { 321 + "id": "0352a8ca-24ee-41ec-abee-103334594916", 322 + "cellType": "REPS", 323 + "value": "10" 324 + } 325 + ], 326 + "isCompleted": false 327 + }, 328 + { 329 + "id": "adc683c3-5372-4ff8-8db5-1ae5c65d5c02", 330 + "cells": [ 331 + { 332 + "id": "596035f4-d09a-4d39-909c-b57c8e0bb534", 333 + "cellType": "BARBELL_WEIGHT" 334 + }, 335 + { 336 + "id": "455c8d31-9f3e-4e8d-a8d4-e5a43cedb12a", 337 + "cellType": "REPS", 338 + "value": "10" 339 + } 340 + ], 341 + "isCompleted": false 342 + }, 343 + { 344 + "id": "94a524f1-2f3f-439d-84d7-82d0acf62735", 345 + "cells": [ 346 + { 347 + "id": "e7375afc-d292-4f6f-bd8e-0e90d42a7a2e", 348 + "cellType": "BARBELL_WEIGHT" 349 + }, 350 + { 351 + "id": "acc8f757-8b4f-4e17-b94d-7922c8c77aa7", 352 + "cellType": "REPS", 353 + "value": "10" 354 + } 355 + ], 356 + "isCompleted": false 357 + } 358 + ] 359 + }, 360 + { 361 + "_links": { 362 + "measurement": { 363 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/5974b925-ff0f-40de-9385-e6ccac763ddd" 364 + } 365 + }, 366 + "_embedded": {}, 367 + "id": "0a188054-ae8d-48f2-9268-2247f65dadbd", 368 + "cellSets": [ 369 + { 370 + "id": "ad37f9cf-2c5c-4ea5-9e89-919668042537", 371 + "cells": [ 372 + { 373 + "id": "eea2480c-1be7-4520-b83a-e435e6796af0", 374 + "cellType": "BARBELL_WEIGHT" 375 + }, 376 + { 377 + "id": "6428176a-2b89-4153-bf9b-50fc4ac851ba", 378 + "cellType": "REPS", 379 + "value": "10" 380 + } 381 + ], 382 + "isCompleted": false 383 + }, 384 + { 385 + "id": "b9398588-a21b-4e84-8936-68c5c324d32b", 386 + "cells": [ 387 + { 388 + "id": "d5d94ae3-b7c7-4c16-b01f-7abf1f167bcc", 389 + "cellType": "BARBELL_WEIGHT" 390 + }, 391 + { 392 + "id": "5b80716c-d5ad-4184-a7bb-328e8c3c1010", 393 + "cellType": "REPS", 394 + "value": "10" 395 + } 396 + ], 397 + "isCompleted": false 398 + }, 399 + { 400 + "id": "ccad8df2-5177-4b7f-81fc-e95d26ca175b", 401 + "cells": [ 402 + { 403 + "id": "aad33526-543e-4ed6-8233-398e3555cb3c", 404 + "cellType": "BARBELL_WEIGHT" 405 + }, 406 + { 407 + "id": "6be88233-c9af-4f19-8b82-85d0270ec676", 408 + "cellType": "REPS", 409 + "value": "10" 410 + } 411 + ], 412 + "isCompleted": false 413 + } 414 + ] 415 + }, 416 + { 417 + "_links": { 418 + "measurement": { 419 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ae345023-155f-4c14-b6e9-fcafc87619e3" 420 + } 421 + }, 422 + "_embedded": {}, 423 + "id": "2a82b44b-b644-4ffb-aa5d-f3b9232b4d6f", 424 + "cellSets": [ 425 + { 426 + "id": "290673cd-cd16-48b3-9fbc-c66e03651a90", 427 + "cells": [ 428 + { 429 + "id": "87e7bdf2-adbe-4d99-918d-a728fd3a618d", 430 + "cellType": "DUMBBELL_WEIGHT" 431 + }, 432 + { 433 + "id": "7b2031eb-6269-4442-877c-3ec403ffd5ab", 434 + "cellType": "REPS", 435 + "value": "10" 436 + } 437 + ], 438 + "isCompleted": false 439 + }, 440 + { 441 + "id": "d472eecf-a84a-4222-bc56-af7047d11502", 442 + "cells": [ 443 + { 444 + "id": "d9bed116-74d6-419a-826f-52a5b95b31c4", 445 + "cellType": "DUMBBELL_WEIGHT" 446 + }, 447 + { 448 + "id": "29b40a4f-8b29-422c-85fa-29f79089ec17", 449 + "cellType": "REPS", 450 + "value": "10" 451 + } 452 + ], 453 + "isCompleted": false 454 + }, 455 + { 456 + "id": "a24a9ccc-b0a6-4eb1-b739-e2fc6c5e774c", 457 + "cells": [ 458 + { 459 + "id": "7f0d7fab-d590-4ff0-8596-ebcc00b5e55a", 460 + "cellType": "DUMBBELL_WEIGHT" 461 + }, 462 + { 463 + "id": "e9c761c5-2867-4f2c-bb7b-72d26a83baa6", 464 + "cellType": "REPS", 465 + "value": "10" 466 + } 467 + ], 468 + "isCompleted": false 469 + } 470 + ] 471 + }, 472 + { 473 + "_links": { 474 + "measurement": { 475 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e5fa68c3-8f89-4fb8-a8b6-907c1feaceae" 476 + } 477 + }, 478 + "_embedded": {}, 479 + "id": "94684dca-9074-403c-a91f-651d87a43e40", 480 + "cellSets": [ 481 + { 482 + "id": "0b93ff0c-4531-4f68-b004-44905576d127", 483 + "cells": [ 484 + { 485 + "id": "6350ef84-d973-4f3c-95c6-821dc9eeb1d5", 486 + "cellType": "BARBELL_WEIGHT" 487 + }, 488 + { 489 + "id": "10a76008-6a74-439b-9d42-e94c8316dbd7", 490 + "cellType": "REPS", 491 + "value": "10" 492 + } 493 + ], 494 + "isCompleted": false 495 + }, 496 + { 497 + "id": "140f367f-b789-41dc-91eb-86e30cc250d6", 498 + "cells": [ 499 + { 500 + "id": "1477970e-00d6-4cb8-bf41-23f83dc15aa7", 501 + "cellType": "BARBELL_WEIGHT" 502 + }, 503 + { 504 + "id": "f2cde9cc-bcff-4429-a94d-6b632de7e2dd", 505 + "cellType": "REPS", 506 + "value": "10" 507 + } 508 + ], 509 + "isCompleted": false 510 + }, 511 + { 512 + "id": "ab904a46-703a-4b7a-95a2-85e703d09f6a", 513 + "cells": [ 514 + { 515 + "id": "80eb2562-cba2-4dae-a375-108072917d04", 516 + "cellType": "BARBELL_WEIGHT" 517 + }, 518 + { 519 + "id": "f59d0b93-59da-405c-bfaf-9d7e089c368b", 520 + "cellType": "REPS", 521 + "value": "10" 522 + } 523 + ], 524 + "isCompleted": false 525 + } 526 + ] 527 + } 528 + ] 529 + }, 530 + "isGlobal": true, 531 + "id": "dd0a1356-7f3b-45b2-a2ef-1dd6fc0b245a", 532 + "created": "2017-01-02T11:31:52.477Z", 533 + "lastChanged": "2017-12-05T07:50:13.314Z", 534 + "name": { 535 + "en": "Chest and Triceps" 536 + }, 537 + "index": 1, 538 + "access": "PRIVATE", 539 + "logType": "TEMPLATE" 540 + }, 541 + { 542 + "_links": { 543 + "self": { 544 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/840aecee-767a-41a7-9a11-c581066c34b6" 545 + }, 546 + "user": { 547 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 548 + }, 549 + "folder": [ 550 + { 551 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/folders/example-templates" 552 + } 553 + ] 554 + }, 555 + "_embedded": { 556 + "cellSetGroup": [ 557 + { 558 + "_links": { 559 + "measurement": { 560 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b748103d-3014-4cae-a349-cec433528c3a" 561 + } 562 + }, 563 + "_embedded": {}, 564 + "id": "7859412d-e7ca-4b0c-adf2-883bdf01932b", 565 + "cellSets": [ 566 + { 567 + "id": "366a0851-18b9-4940-90d5-e247af9d1b64", 568 + "cells": [ 569 + { 570 + "id": "2507e66f-072f-4234-b3ba-631410711cc0", 571 + "cellType": "BARBELL_WEIGHT" 572 + }, 573 + { 574 + "id": "60f267eb-507c-48fa-8e64-26abb4197d6a", 575 + "cellType": "REPS", 576 + "value": "10" 577 + } 578 + ], 579 + "isCompleted": false 580 + }, 581 + { 582 + "id": "0bfb525a-ed2a-4cd9-b2ad-8ed576a6c8ff", 583 + "cells": [ 584 + { 585 + "id": "43f4757a-fcf7-4143-b69c-f1b8d54dd099", 586 + "cellType": "BARBELL_WEIGHT" 587 + }, 588 + { 589 + "id": "95a85282-8b15-4e5b-ba25-aaee9b4decc8", 590 + "cellType": "REPS", 591 + "value": "10" 592 + } 593 + ], 594 + "isCompleted": false 595 + }, 596 + { 597 + "id": "b9bfb1f1-8f9a-4e18-b760-b8510e8d8788", 598 + "cells": [ 599 + { 600 + "id": "a6adb8eb-f0b5-4785-bc1f-ae58d0c74695", 601 + "cellType": "BARBELL_WEIGHT" 602 + }, 603 + { 604 + "id": "61d79ed4-089b-4e61-963d-ce14bbd78344", 605 + "cellType": "REPS", 606 + "value": "10" 607 + } 608 + ], 609 + "isCompleted": false 610 + } 611 + ] 612 + }, 613 + { 614 + "_links": { 615 + "measurement": { 616 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/143f848f-3a01-40bd-88d1-613c3a88309e" 617 + } 618 + }, 619 + "_embedded": {}, 620 + "id": "53c02d24-6469-42bd-8481-c5e3c9d7fdb0", 621 + "cellSets": [ 622 + { 623 + "id": "19502c3a-6943-4c5a-9b2f-f54e01920d5a", 624 + "cells": [ 625 + { 626 + "id": "9ec54adb-d16e-4936-ae27-4ece6d0d9866", 627 + "cellType": "OTHER_WEIGHT" 628 + }, 629 + { 630 + "id": "015a3051-3ddd-47ab-8c2d-7e17f486fa15", 631 + "cellType": "REPS", 632 + "value": "10" 633 + } 634 + ], 635 + "isCompleted": false 636 + }, 637 + { 638 + "id": "3255ca8b-d8b1-4d98-aeb3-ac3f17eeca0b", 639 + "cells": [ 640 + { 641 + "id": "dc7aabea-956d-49cb-b19e-eb40dbd28666", 642 + "cellType": "OTHER_WEIGHT" 643 + }, 644 + { 645 + "id": "e5a06bb6-cc33-456d-938a-ad4a886712a3", 646 + "cellType": "REPS", 647 + "value": "10" 648 + } 649 + ], 650 + "isCompleted": false 651 + }, 652 + { 653 + "id": "f31f9e1b-c03e-4cd4-8ff2-c15d72ee6dce", 654 + "cells": [ 655 + { 656 + "id": "e23302a0-4343-43f2-a963-281e38f765c5", 657 + "cellType": "OTHER_WEIGHT" 658 + }, 659 + { 660 + "id": "bf177613-5829-4435-a243-fe0ce5a35add", 661 + "cellType": "REPS", 662 + "value": "10" 663 + } 664 + ], 665 + "isCompleted": false 666 + } 667 + ] 668 + }, 669 + { 670 + "_links": { 671 + "measurement": { 672 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b92aa3dd-98e1-4e99-a229-434be54c1ae5" 673 + } 674 + }, 675 + "_embedded": {}, 676 + "id": "36b51ec6-7308-4990-9149-994114c96a8f", 677 + "cellSets": [ 678 + { 679 + "id": "868338e2-badc-4e3a-a744-25b185069716", 680 + "cells": [ 681 + { 682 + "id": "d3caf501-f223-44c7-8361-a45d1258f137", 683 + "cellType": "OTHER_WEIGHT" 684 + }, 685 + { 686 + "id": "4f80a27a-14a4-4ef5-976a-322f7bc1fd00", 687 + "cellType": "REPS", 688 + "value": "10" 689 + } 690 + ], 691 + "isCompleted": false 692 + }, 693 + { 694 + "id": "782a06c3-aea7-4112-889b-5e88a328343c", 695 + "cells": [ 696 + { 697 + "id": "256536df-3078-4b17-aee9-16152b753d90", 698 + "cellType": "OTHER_WEIGHT" 699 + }, 700 + { 701 + "id": "2fe97fd4-f22d-47c4-a765-032d8b5f1530", 702 + "cellType": "REPS", 703 + "value": "10" 704 + } 705 + ], 706 + "isCompleted": false 707 + }, 708 + { 709 + "id": "f4279a5c-1cb6-4fd1-a523-3dbd2a6848ca", 710 + "cells": [ 711 + { 712 + "id": "194c5f74-9686-42f6-9de0-0c63c1eac909", 713 + "cellType": "OTHER_WEIGHT" 714 + }, 715 + { 716 + "id": "a3d8d3a1-279f-491d-b01d-f883b62ec1b9", 717 + "cellType": "REPS", 718 + "value": "10" 719 + } 720 + ], 721 + "isCompleted": false 722 + } 723 + ] 724 + }, 725 + { 726 + "_links": { 727 + "measurement": { 728 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/5819ecdc-a430-47fd-984d-9b221bb337ea" 729 + } 730 + }, 731 + "_embedded": {}, 732 + "id": "d038402b-378c-43c0-84b4-82807c214735", 733 + "cellSets": [ 734 + { 735 + "id": "381ca4e2-a020-4bc2-b6e4-df585a8e66f3", 736 + "cells": [ 737 + { 738 + "id": "a1fca79a-6ef7-44b0-8282-5a4bca048de5", 739 + "cellType": "BARBELL_WEIGHT" 740 + }, 741 + { 742 + "id": "f91b5242-874f-4d73-8bb8-f3c24aaa4c5f", 743 + "cellType": "REPS", 744 + "value": "10" 745 + } 746 + ], 747 + "isCompleted": false 748 + }, 749 + { 750 + "id": "51d264a5-9980-4164-b7c4-ce70776db43d", 751 + "cells": [ 752 + { 753 + "id": "7bad93a8-ffa7-46d7-9df9-4fc893c103e0", 754 + "cellType": "BARBELL_WEIGHT" 755 + }, 756 + { 757 + "id": "7a98e92f-20f0-4131-818d-558f1f7f96e3", 758 + "cellType": "REPS", 759 + "value": "10" 760 + } 761 + ], 762 + "isCompleted": false 763 + }, 764 + { 765 + "id": "701cb819-8512-4998-9224-78acb71b6d22", 766 + "cells": [ 767 + { 768 + "id": "bd30d345-d76a-43fe-af98-492212961e59", 769 + "cellType": "BARBELL_WEIGHT" 770 + }, 771 + { 772 + "id": "18c62f7f-a14b-4255-afbd-b09f4247abc4", 773 + "cellType": "REPS", 774 + "value": "10" 775 + } 776 + ], 777 + "isCompleted": false 778 + } 779 + ] 780 + } 781 + ] 782 + }, 783 + "isGlobal": true, 784 + "id": "840aecee-767a-41a7-9a11-c581066c34b6", 785 + "created": "2017-01-02T11:30:52.736Z", 786 + "lastChanged": "2017-12-05T07:53:07.595Z", 787 + "name": { 788 + "en": "Back and Biceps" 789 + }, 790 + "index": 2, 791 + "access": "PRIVATE", 792 + "logType": "TEMPLATE" 793 + }, 794 + { 795 + "_links": { 796 + "self": { 797 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/4af63d92-425f-4ed2-ae12-aa1d9a758881" 798 + }, 799 + "user": { 800 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 801 + }, 802 + "folder": [ 803 + { 804 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/folders/example-templates" 805 + } 806 + ] 807 + }, 808 + "_embedded": { 809 + "cellSetGroup": [ 810 + { 811 + "_links": { 812 + "measurement": { 813 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b2f5a2de-c684-4e94-a6e5-581e0695fcac" 814 + } 815 + }, 816 + "_embedded": {}, 817 + "id": "c17384f4-0943-496b-989f-3bee45e3e59b", 818 + "cellSets": [ 819 + { 820 + "id": "c8ef044d-af76-4ed1-a641-050e71125345", 821 + "cells": [ 822 + { 823 + "id": "3b39e32e-441e-4e32-afd0-358362361d11", 824 + "cellType": "BARBELL_WEIGHT" 825 + }, 826 + { 827 + "id": "aedbdfb7-d139-41e7-99b4-1bbf04e85e38", 828 + "cellType": "REPS", 829 + "value": "5" 830 + } 831 + ], 832 + "isCompleted": false 833 + }, 834 + { 835 + "id": "8f88bf4c-3874-494c-8aa3-20a11a142bcd", 836 + "cells": [ 837 + { 838 + "id": "a47323bb-3d8b-4871-b9aa-37cf04473e23", 839 + "cellType": "BARBELL_WEIGHT" 840 + }, 841 + { 842 + "id": "732050de-724d-4c92-98a1-1695b2467169", 843 + "cellType": "REPS", 844 + "value": "5" 845 + } 846 + ], 847 + "isCompleted": false 848 + }, 849 + { 850 + "id": "c17be01a-782b-4a25-b322-8712eb4988f4", 851 + "cells": [ 852 + { 853 + "id": "5fa55278-9411-4fa3-a66e-d6aa623b9c9f", 854 + "cellType": "BARBELL_WEIGHT" 855 + }, 856 + { 857 + "id": "37e1c446-646c-45bd-a45d-9ebfd961d4fc", 858 + "cellType": "REPS", 859 + "value": "5" 860 + } 861 + ], 862 + "isCompleted": false 863 + }, 864 + { 865 + "id": "cdbc5c48-ecf6-4276-a73e-09fa409848c5", 866 + "cells": [ 867 + { 868 + "id": "1ef295e7-f870-4442-ac56-4973ee22c937", 869 + "cellType": "BARBELL_WEIGHT" 870 + }, 871 + { 872 + "id": "b4d389ae-c956-4629-beea-5564ca376a50", 873 + "cellType": "REPS", 874 + "value": "5" 875 + } 876 + ], 877 + "isCompleted": false 878 + }, 879 + { 880 + "id": "b1ae691e-d4d2-476e-b56e-055fa44d0d41", 881 + "cells": [ 882 + { 883 + "id": "39e8a62d-33f2-49e8-8ada-875e71f96efb", 884 + "cellType": "BARBELL_WEIGHT" 885 + }, 886 + { 887 + "id": "6d2e235d-5be5-497f-8a9c-270b64dcf02c", 888 + "cellType": "REPS", 889 + "value": "5" 890 + } 891 + ], 892 + "isCompleted": false 893 + } 894 + ] 895 + }, 896 + { 897 + "_links": { 898 + "measurement": { 899 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 900 + } 901 + }, 902 + "_embedded": {}, 903 + "id": "a610ee2c-6fe4-4f4c-bd43-8caa35df6aa6", 904 + "cellSets": [ 905 + { 906 + "id": "31c21c54-b2da-4e58-88fc-7faf99773677", 907 + "cells": [ 908 + { 909 + "id": "4bc9af4e-7375-4d2c-8e8e-844986a872cc", 910 + "cellType": "BARBELL_WEIGHT" 911 + }, 912 + { 913 + "id": "2e6ddf17-79b1-41f1-9a4d-5d7e077e27bc", 914 + "cellType": "REPS", 915 + "value": "5" 916 + } 917 + ], 918 + "isCompleted": false 919 + }, 920 + { 921 + "id": "e1d50402-3661-48e8-be4a-0b2b60ecbee0", 922 + "cells": [ 923 + { 924 + "id": "6f4b2f98-5718-4a9a-9569-b3bf50abe2d3", 925 + "cellType": "BARBELL_WEIGHT" 926 + }, 927 + { 928 + "id": "1855f0ad-579d-4f50-bed6-dba1595b2a60", 929 + "cellType": "REPS", 930 + "value": "5" 931 + } 932 + ], 933 + "isCompleted": false 934 + }, 935 + { 936 + "id": "16ba6a44-884d-4cb1-a1ec-701867037e9b", 937 + "cells": [ 938 + { 939 + "id": "42e754bd-4c70-470e-b83b-0106712f62ef", 940 + "cellType": "BARBELL_WEIGHT" 941 + }, 942 + { 943 + "id": "a964f94c-98b7-4d34-bcfe-019a0e2ecad0", 944 + "cellType": "REPS", 945 + "value": "5" 946 + } 947 + ], 948 + "isCompleted": false 949 + }, 950 + { 951 + "id": "8b82a194-ae27-4ab1-bb4a-dd584f179ac9", 952 + "cells": [ 953 + { 954 + "id": "f063044d-8cc3-44f5-9ecb-37cb2b32145a", 955 + "cellType": "BARBELL_WEIGHT" 956 + }, 957 + { 958 + "id": "f56a5cb2-ba82-44a9-9e41-3d4df62559dc", 959 + "cellType": "REPS", 960 + "value": "5" 961 + } 962 + ], 963 + "isCompleted": false 964 + }, 965 + { 966 + "id": "cc7245a3-1f61-4611-a24d-661e99f6c99a", 967 + "cells": [ 968 + { 969 + "id": "c1ca414c-5af6-49ef-9166-d74e40d80cf5", 970 + "cellType": "BARBELL_WEIGHT" 971 + }, 972 + { 973 + "id": "d2699550-da18-475b-b970-784b1459eacd", 974 + "cellType": "REPS", 975 + "value": "5" 976 + } 977 + ], 978 + "isCompleted": false 979 + } 980 + ] 981 + }, 982 + { 983 + "_links": { 984 + "measurement": { 985 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2ca2b6d5-f16d-4eac-89a2-05e1be0ceee7" 986 + } 987 + }, 988 + "_embedded": {}, 989 + "id": "fae82a3c-4cc5-46ce-97cb-abf0c9744947", 990 + "cellSets": [ 991 + { 992 + "id": "0707a48b-634e-4a15-a72d-3c8198637165", 993 + "cells": [ 994 + { 995 + "id": "e6236b1a-eede-4587-bd77-5c5fedc0fb29", 996 + "cellType": "BARBELL_WEIGHT" 997 + }, 998 + { 999 + "id": "b6efb151-e699-45c7-a5ed-eab2e26e2a89", 1000 + "cellType": "REPS", 1001 + "value": "5" 1002 + } 1003 + ], 1004 + "isCompleted": false 1005 + }, 1006 + { 1007 + "id": "e9fcf3d6-dcb2-4da1-8f35-5cc9ff8dc50d", 1008 + "cells": [ 1009 + { 1010 + "id": "f736aa0d-088d-4e69-ba78-eefa56bd5ecf", 1011 + "cellType": "BARBELL_WEIGHT" 1012 + }, 1013 + { 1014 + "id": "fb975e36-76ff-496a-b239-b0a85c7daef9", 1015 + "cellType": "REPS", 1016 + "value": "5" 1017 + } 1018 + ], 1019 + "isCompleted": false 1020 + }, 1021 + { 1022 + "id": "eb177446-6cb7-4911-b55a-640e9666f84f", 1023 + "cells": [ 1024 + { 1025 + "id": "e0ae31ce-ab67-4578-b0bf-89ff886daa51", 1026 + "cellType": "BARBELL_WEIGHT" 1027 + }, 1028 + { 1029 + "id": "57dcdec2-361c-4938-9ccf-d1ad594e18a4", 1030 + "cellType": "REPS", 1031 + "value": "5" 1032 + } 1033 + ], 1034 + "isCompleted": false 1035 + }, 1036 + { 1037 + "id": "00d2cf2d-29a5-4374-bb1b-d7a9e534deb2", 1038 + "cells": [ 1039 + { 1040 + "id": "d37ca174-48eb-49b2-b629-bae90826595f", 1041 + "cellType": "BARBELL_WEIGHT" 1042 + }, 1043 + { 1044 + "id": "41f62ad0-9901-418c-8c59-1b63e319a814", 1045 + "cellType": "REPS", 1046 + "value": "5" 1047 + } 1048 + ], 1049 + "isCompleted": false 1050 + }, 1051 + { 1052 + "id": "a64c1155-0009-4783-b451-7e32c8764642", 1053 + "cells": [ 1054 + { 1055 + "id": "fed27c19-b4a2-43e0-8b8c-3b4f6c910428", 1056 + "cellType": "BARBELL_WEIGHT" 1057 + }, 1058 + { 1059 + "id": "737239cd-4f4e-4f32-bc7f-9a57b5f0148b", 1060 + "cellType": "REPS", 1061 + "value": "5" 1062 + } 1063 + ], 1064 + "isCompleted": false 1065 + } 1066 + ] 1067 + } 1068 + ] 1069 + }, 1070 + "isGlobal": true, 1071 + "id": "4af63d92-425f-4ed2-ae12-aa1d9a758881", 1072 + "created": "2017-01-02T11:24:14.036Z", 1073 + "lastChanged": "2017-12-05T13:09:30.4Z", 1074 + "name": { 1075 + "en": "Strong 5x5 - Workout A" 1076 + }, 1077 + "index": 3, 1078 + "access": "PRIVATE", 1079 + "logType": "TEMPLATE" 1080 + }, 1081 + { 1082 + "_links": { 1083 + "self": { 1084 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/7aab118e-7358-42fe-a926-4b64c2fbb5e5" 1085 + }, 1086 + "user": { 1087 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 1088 + }, 1089 + "folder": [ 1090 + { 1091 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/folders/example-templates" 1092 + } 1093 + ] 1094 + }, 1095 + "_embedded": { 1096 + "cellSetGroup": [ 1097 + { 1098 + "_links": { 1099 + "measurement": { 1100 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b748103d-3014-4cae-a349-cec433528c3a" 1101 + } 1102 + }, 1103 + "_embedded": {}, 1104 + "id": "57332fff-654a-4dcb-9572-bf3958e2aeb7", 1105 + "cellSets": [ 1106 + { 1107 + "id": "e8efe04b-ee15-4b0e-b87f-8d5389baad4f", 1108 + "cells": [ 1109 + { 1110 + "id": "975318b8-8e27-4e70-94ef-89262f3ac170", 1111 + "cellType": "BARBELL_WEIGHT" 1112 + }, 1113 + { 1114 + "id": "6576b555-0498-455c-a03e-a748f93dd3bd", 1115 + "cellType": "REPS", 1116 + "value": "5" 1117 + } 1118 + ] 1119 + }, 1120 + { 1121 + "id": "cf211ff6-36ef-4915-a4fd-c7e24ebc8a02", 1122 + "cells": [ 1123 + { 1124 + "id": "0e94a09b-0c0f-4da4-a9b0-947e17d53c80", 1125 + "cellType": "BARBELL_WEIGHT" 1126 + }, 1127 + { 1128 + "id": "051bc399-4763-4cfb-88de-f21627295ea1", 1129 + "cellType": "REPS", 1130 + "value": "5" 1131 + } 1132 + ] 1133 + }, 1134 + { 1135 + "id": "ddb3f7e3-bcdd-484d-af20-2037384d472f", 1136 + "cells": [ 1137 + { 1138 + "id": "fd08114d-3cf3-405e-a86e-9f9572da1bab", 1139 + "cellType": "BARBELL_WEIGHT" 1140 + }, 1141 + { 1142 + "id": "cef47026-381e-4eb0-8daf-a1f5e6c53b14", 1143 + "cellType": "REPS", 1144 + "value": "5" 1145 + } 1146 + ] 1147 + }, 1148 + { 1149 + "id": "0d2a6d87-bd93-42f2-af83-c0ccc7b0723d", 1150 + "cells": [ 1151 + { 1152 + "id": "c19fe2b2-6f93-4727-83e0-d8294d8237dc", 1153 + "cellType": "BARBELL_WEIGHT" 1154 + }, 1155 + { 1156 + "id": "096f4274-3e96-460d-a0d8-dd4c7017d3a5", 1157 + "cellType": "REPS", 1158 + "value": "5" 1159 + } 1160 + ] 1161 + }, 1162 + { 1163 + "id": "e0dd6eea-0543-4a70-9453-955e5b6e9814", 1164 + "cells": [ 1165 + { 1166 + "id": "46e21990-9fe1-4118-8954-3d41a1b698eb", 1167 + "cellType": "BARBELL_WEIGHT" 1168 + }, 1169 + { 1170 + "id": "54aeac96-55a5-436d-8e0a-84a882295bda", 1171 + "cellType": "REPS", 1172 + "value": "5" 1173 + } 1174 + ] 1175 + } 1176 + ] 1177 + }, 1178 + { 1179 + "_links": { 1180 + "measurement": { 1181 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/45a0a30b-ffb7-4722-a0cf-2889baa7ff9a" 1182 + } 1183 + }, 1184 + "_embedded": {}, 1185 + "id": "f61ca98e-191e-41b5-8126-1895ccdb29e8", 1186 + "cellSets": [ 1187 + { 1188 + "id": "faaf90e5-40b6-4ec6-922b-92202866a952", 1189 + "cells": [ 1190 + { 1191 + "id": "8467406f-1afa-431d-9191-1e08134d83a5", 1192 + "cellType": "BARBELL_WEIGHT" 1193 + }, 1194 + { 1195 + "id": "7fea11b4-3258-4844-9b0c-eb684f4b1739", 1196 + "cellType": "REPS", 1197 + "value": "5" 1198 + } 1199 + ] 1200 + }, 1201 + { 1202 + "id": "5a6a4b94-9176-4655-84cf-c337ecb8442f", 1203 + "cells": [ 1204 + { 1205 + "id": "0612317b-2d26-436c-b9aa-8235a28a9717", 1206 + "cellType": "BARBELL_WEIGHT" 1207 + }, 1208 + { 1209 + "id": "e7e8e806-899b-4b4b-ae91-a0bae76cadab", 1210 + "cellType": "REPS", 1211 + "value": "5" 1212 + } 1213 + ] 1214 + }, 1215 + { 1216 + "id": "d0008cbc-75f2-40a1-b60d-aa95681636e8", 1217 + "cells": [ 1218 + { 1219 + "id": "15f18eed-f037-4123-afd7-3d395610c06e", 1220 + "cellType": "BARBELL_WEIGHT" 1221 + }, 1222 + { 1223 + "id": "29ee172c-e89f-4a81-9279-28c27f49145e", 1224 + "cellType": "REPS", 1225 + "value": "5" 1226 + } 1227 + ] 1228 + }, 1229 + { 1230 + "id": "1133f6bd-59e8-4746-8842-8f18c6c8ef06", 1231 + "cells": [ 1232 + { 1233 + "id": "bba0595a-08c1-44ee-82ad-1fd23a945978", 1234 + "cellType": "BARBELL_WEIGHT" 1235 + }, 1236 + { 1237 + "id": "8188c1b1-853a-43c7-aa0a-63677e803a22", 1238 + "cellType": "REPS", 1239 + "value": "5" 1240 + } 1241 + ] 1242 + }, 1243 + { 1244 + "id": "8b9c231f-0275-4af4-be38-4dc2ef927b0f", 1245 + "cells": [ 1246 + { 1247 + "id": "d0d1a49c-efb7-4f30-bb12-494387e91967", 1248 + "cellType": "BARBELL_WEIGHT" 1249 + }, 1250 + { 1251 + "id": "02a563a6-a92c-42b6-87ec-41ced35d9aab", 1252 + "cellType": "REPS", 1253 + "value": "5" 1254 + } 1255 + ] 1256 + } 1257 + ] 1258 + }, 1259 + { 1260 + "_links": { 1261 + "measurement": { 1262 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b92aa3dd-98e1-4e99-a229-434be54c1ae5" 1263 + } 1264 + }, 1265 + "_embedded": {}, 1266 + "id": "06e6136e-6029-4273-b859-7889687de220", 1267 + "cellSets": [ 1268 + { 1269 + "id": "0d9f41ac-8337-451e-ab03-5d01a3683d7d", 1270 + "cells": [ 1271 + { 1272 + "id": "1f9f73ec-814d-4696-8ce9-d9ad5affacc3", 1273 + "cellType": "OTHER_WEIGHT" 1274 + }, 1275 + { 1276 + "id": "04cb3fc4-bfd9-4594-b077-673e79ed9ccb", 1277 + "cellType": "REPS", 1278 + "value": "5" 1279 + } 1280 + ] 1281 + }, 1282 + { 1283 + "id": "68f22a49-d12f-495b-be76-dd6a549eb976", 1284 + "cells": [ 1285 + { 1286 + "id": "f76018da-6c20-43ee-80f8-dd192ff08e23", 1287 + "cellType": "OTHER_WEIGHT" 1288 + }, 1289 + { 1290 + "id": "07c10ba1-e15e-41c0-9aac-59f3e631c7b4", 1291 + "cellType": "REPS", 1292 + "value": "5" 1293 + } 1294 + ] 1295 + }, 1296 + { 1297 + "id": "e1a12513-e5b5-4e42-b6e5-2276f62aea67", 1298 + "cells": [ 1299 + { 1300 + "id": "97aa546a-af40-454d-8744-6b61f8051161", 1301 + "cellType": "OTHER_WEIGHT" 1302 + }, 1303 + { 1304 + "id": "bfef6c34-7b4d-4a05-b3a7-2569eb3bf016", 1305 + "cellType": "REPS", 1306 + "value": "5" 1307 + } 1308 + ] 1309 + } 1310 + ] 1311 + } 1312 + ] 1313 + }, 1314 + "isGlobal": true, 1315 + "id": "7aab118e-7358-42fe-a926-4b64c2fbb5e5", 1316 + "created": "2016-08-06T10:11:38.867Z", 1317 + "lastChanged": "2017-12-05T13:09:53.879Z", 1318 + "name": { 1319 + "en": "Pull Workout" 1320 + }, 1321 + "index": 2, 1322 + "access": "PRIVATE", 1323 + "logType": "TEMPLATE", 1324 + "isHidden": true 1325 + }, 1326 + { 1327 + "_links": { 1328 + "self": { 1329 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/c6e357f5-f8ee-4c3c-8eeb-80c1b3eba5a3" 1330 + }, 1331 + "user": { 1332 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 1333 + }, 1334 + "folder": [ 1335 + { 1336 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/folders/example-templates" 1337 + } 1338 + ] 1339 + }, 1340 + "_embedded": { 1341 + "cellSetGroup": [ 1342 + { 1343 + "_links": { 1344 + "measurement": { 1345 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b2f5a2de-c684-4e94-a6e5-581e0695fcac" 1346 + } 1347 + }, 1348 + "_embedded": {}, 1349 + "id": "5d3c42d2-9998-4f20-a8f0-c57a551ae5ff", 1350 + "cellSets": [ 1351 + { 1352 + "id": "06e35b37-15a0-4a1a-9295-f333517b4e11", 1353 + "cells": [ 1354 + { 1355 + "id": "7947d6a9-cf36-4233-a99c-69abe9a0de9c", 1356 + "cellType": "BARBELL_WEIGHT" 1357 + }, 1358 + { 1359 + "id": "cd811581-d865-40ce-8d51-79373a80285d", 1360 + "cellType": "REPS", 1361 + "value": "5" 1362 + } 1363 + ] 1364 + }, 1365 + { 1366 + "id": "d46f9a16-5988-42f6-8f0b-700b181d36c1", 1367 + "cells": [ 1368 + { 1369 + "id": "5f7fdb51-ef8e-4bb6-a6a6-bd0a0ef3550a", 1370 + "cellType": "BARBELL_WEIGHT" 1371 + }, 1372 + { 1373 + "id": "2ea35aa8-9abf-414b-898d-594c2d337f99", 1374 + "cellType": "REPS", 1375 + "value": "5" 1376 + } 1377 + ] 1378 + }, 1379 + { 1380 + "id": "5be7f351-602b-40dd-b922-fa3729babdf9", 1381 + "cells": [ 1382 + { 1383 + "id": "3367f3b4-0e37-42a7-879f-deddc9a87700", 1384 + "cellType": "BARBELL_WEIGHT" 1385 + }, 1386 + { 1387 + "id": "18397199-c531-475f-9a1e-d30dad1aa6e9", 1388 + "cellType": "REPS", 1389 + "value": "5" 1390 + } 1391 + ] 1392 + }, 1393 + { 1394 + "id": "f72c7ff3-01c5-4f28-80a9-24864437b745", 1395 + "cells": [ 1396 + { 1397 + "id": "afeb5364-6eb8-4498-8c01-124747b27aff", 1398 + "cellType": "BARBELL_WEIGHT" 1399 + }, 1400 + { 1401 + "id": "39170dca-c3b3-4e80-b1cc-69d6bee2118c", 1402 + "cellType": "REPS", 1403 + "value": "5" 1404 + } 1405 + ] 1406 + }, 1407 + { 1408 + "id": "70c100af-0322-4648-8841-6b1f6a164af6", 1409 + "cells": [ 1410 + { 1411 + "id": "0ce631f4-1dd3-4005-8d03-5fce7afe0688", 1412 + "cellType": "BARBELL_WEIGHT" 1413 + }, 1414 + { 1415 + "id": "16bcc6ef-fce7-494d-8294-ef1876bfa8da", 1416 + "cellType": "REPS", 1417 + "value": "5" 1418 + } 1419 + ] 1420 + } 1421 + ] 1422 + }, 1423 + { 1424 + "_links": { 1425 + "measurement": { 1426 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 1427 + } 1428 + }, 1429 + "_embedded": {}, 1430 + "id": "87d8586f-867f-441e-820b-76f5bb52186d", 1431 + "cellSets": [ 1432 + { 1433 + "id": "ae147b79-9c56-4064-9e78-ca4d0f7cf0ab", 1434 + "cells": [ 1435 + { 1436 + "id": "0995289a-b3af-4067-ac0b-7f00c768750a", 1437 + "cellType": "BARBELL_WEIGHT" 1438 + }, 1439 + { 1440 + "id": "55bcea47-1410-428c-bcc2-e7b5c08fbcda", 1441 + "cellType": "REPS", 1442 + "value": "5" 1443 + } 1444 + ] 1445 + }, 1446 + { 1447 + "id": "eaea9a8a-b5b2-426a-bdc5-5fc8f0336784", 1448 + "cells": [ 1449 + { 1450 + "id": "ebc7b085-8678-4489-aee9-39a4556b6a15", 1451 + "cellType": "BARBELL_WEIGHT" 1452 + }, 1453 + { 1454 + "id": "5a84c9c0-df83-49d6-9f67-61f6dea193ac", 1455 + "cellType": "REPS", 1456 + "value": "5" 1457 + } 1458 + ] 1459 + }, 1460 + { 1461 + "id": "81a50c5a-6a8e-482e-9b8c-f15916245adf", 1462 + "cells": [ 1463 + { 1464 + "id": "526014f1-149b-43cc-901e-0a5dee87a0e5", 1465 + "cellType": "BARBELL_WEIGHT" 1466 + }, 1467 + { 1468 + "id": "4e63bd99-732d-472b-a5b3-c6702f26db99", 1469 + "cellType": "REPS", 1470 + "value": "5" 1471 + } 1472 + ] 1473 + }, 1474 + { 1475 + "id": "4b892a7e-053b-4dbe-82d6-978b946dbf65", 1476 + "cells": [ 1477 + { 1478 + "id": "e419fc8b-c037-424b-80bc-685755d1b108", 1479 + "cellType": "BARBELL_WEIGHT" 1480 + }, 1481 + { 1482 + "id": "7c04fea1-d2cf-42db-9bd8-8430c0c9f5c7", 1483 + "cellType": "REPS", 1484 + "value": "5" 1485 + } 1486 + ] 1487 + }, 1488 + { 1489 + "id": "15f6efc3-0efd-4406-be8c-dbbbce99f71d", 1490 + "cells": [ 1491 + { 1492 + "id": "e95eb9ef-9970-4eda-9796-16b1f5ecc088", 1493 + "cellType": "BARBELL_WEIGHT" 1494 + }, 1495 + { 1496 + "id": "d6aa7727-66ee-49ab-b6a5-9fc65f1c82c0", 1497 + "cellType": "REPS", 1498 + "value": "5" 1499 + } 1500 + ] 1501 + } 1502 + ] 1503 + }, 1504 + { 1505 + "_links": { 1506 + "measurement": { 1507 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/adb75e5a-c873-4f57-bdf0-0043710ba90d" 1508 + } 1509 + }, 1510 + "_embedded": {}, 1511 + "id": "1118d7d0-8116-4c9f-bbd7-3043b2588141", 1512 + "cellSets": [ 1513 + { 1514 + "id": "84d7f878-e783-44ad-8819-33ca918d2672", 1515 + "cells": [ 1516 + { 1517 + "id": "a139fb44-527c-4813-b616-547c4a1d388a", 1518 + "cellType": "WEIGHTED_BODYWEIGHT", 1519 + "value": "0" 1520 + }, 1521 + { 1522 + "id": "53e94803-65fc-490a-bc2f-c21a074b217d", 1523 + "cellType": "REPS", 1524 + "value": "5" 1525 + } 1526 + ] 1527 + }, 1528 + { 1529 + "id": "42169cd0-4872-4d24-8882-7b2627c9561b", 1530 + "cells": [ 1531 + { 1532 + "id": "28eb0fdf-de1c-405f-b889-d4e37e967e20", 1533 + "cellType": "WEIGHTED_BODYWEIGHT", 1534 + "value": "0" 1535 + }, 1536 + { 1537 + "id": "94fac592-a94d-4e4a-9661-180615846e47", 1538 + "cellType": "REPS", 1539 + "value": "5" 1540 + } 1541 + ] 1542 + }, 1543 + { 1544 + "id": "a4bf7315-640d-42ac-8110-bd2b9a9ba214", 1545 + "cells": [ 1546 + { 1547 + "id": "d1665a05-c7e9-4305-bdb3-9f62f199b999", 1548 + "cellType": "WEIGHTED_BODYWEIGHT", 1549 + "value": "0" 1550 + }, 1551 + { 1552 + "id": "cb573c77-0a44-4b64-ac0f-589ba27761de", 1553 + "cellType": "REPS", 1554 + "value": "5" 1555 + } 1556 + ] 1557 + }, 1558 + { 1559 + "id": "b35b5778-bacd-41ac-baed-3647b5e06946", 1560 + "cells": [ 1561 + { 1562 + "id": "5754968a-1191-41ab-ad64-385329e67e2c", 1563 + "cellType": "WEIGHTED_BODYWEIGHT", 1564 + "value": "0" 1565 + }, 1566 + { 1567 + "id": "9c945f83-8d7f-481c-ac01-c811420ff9bf", 1568 + "cellType": "REPS", 1569 + "value": "5" 1570 + } 1571 + ] 1572 + }, 1573 + { 1574 + "id": "a64080a2-cc6a-45c7-ad80-d6ee517a7f3a", 1575 + "cells": [ 1576 + { 1577 + "id": "d742d451-154f-4c8b-9efa-c691d5321f37", 1578 + "cellType": "WEIGHTED_BODYWEIGHT", 1579 + "value": "0" 1580 + }, 1581 + { 1582 + "id": "3b8ac615-8f06-4090-ab94-fbad6914f842", 1583 + "cellType": "REPS", 1584 + "value": "5" 1585 + } 1586 + ] 1587 + } 1588 + ] 1589 + } 1590 + ] 1591 + }, 1592 + "isGlobal": true, 1593 + "id": "c6e357f5-f8ee-4c3c-8eeb-80c1b3eba5a3", 1594 + "created": "2016-08-06T10:09:21.917Z", 1595 + "lastChanged": "2017-12-05T13:10:17.621Z", 1596 + "name": { 1597 + "en": "Strength 101" 1598 + }, 1599 + "index": 1, 1600 + "access": "PRIVATE", 1601 + "logType": "TEMPLATE", 1602 + "isHidden": true 1603 + } 1604 + ], 1605 + "log": [ 1606 + { 1607 + "_links": { 1608 + "self": { 1609 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/5f91749b-34b0-4c6d-be09-f10bee3b0fd6" 1610 + }, 1611 + "user": { 1612 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 1613 + } 1614 + }, 1615 + "_embedded": { 1616 + "cellSetGroup": [ 1617 + { 1618 + "_links": { 1619 + "measurement": { 1620 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a8121bda-a232-4da2-be80-85bbe05c53d7" 1621 + } 1622 + }, 1623 + "_embedded": {}, 1624 + "id": "7fb02df9-d06d-46a2-aa68-1ed000bd1f5e", 1625 + "cellSets": [ 1626 + { 1627 + "id": "b237f058-3838-45a5-8147-347874d57c1d", 1628 + "cells": [ 1629 + { 1630 + "id": "90ebc3c3-2dc0-4860-bf45-93ac075d430d", 1631 + "cellType": "OTHER_WEIGHT", 1632 + "value": "60" 1633 + }, 1634 + { 1635 + "id": "a2cdc0a3-ef17-4f98-b656-60c0bc2d20e1", 1636 + "cellType": "REPS", 1637 + "value": "12" 1638 + } 1639 + ], 1640 + "isCompleted": true 1641 + }, 1642 + { 1643 + "id": "a2daa8b2-176f-4d21-8b5a-6d0a61d7ddf5", 1644 + "cells": [ 1645 + { 1646 + "id": "866d86e9-a9ae-450b-bae2-b6d760c1aa40", 1647 + "cellType": "OTHER_WEIGHT", 1648 + "value": "70" 1649 + }, 1650 + { 1651 + "id": "2459cb9c-4d2b-4fff-b175-c46708691ea8", 1652 + "cellType": "REPS", 1653 + "value": "12" 1654 + } 1655 + ], 1656 + "isCompleted": true 1657 + }, 1658 + { 1659 + "id": "89567e2f-263a-4ac3-a64f-1c96de51788e", 1660 + "cells": [ 1661 + { 1662 + "id": "799d311b-b08d-4c5d-a677-b882ffe52a44", 1663 + "cellType": "OTHER_WEIGHT", 1664 + "value": "70" 1665 + }, 1666 + { 1667 + "id": "f1a0766e-b6b6-4f4d-82c9-12e374d5345e", 1668 + "cellType": "REPS", 1669 + "value": "13" 1670 + } 1671 + ], 1672 + "isCompleted": true 1673 + }, 1674 + { 1675 + "id": "0886cc4b-79d7-4cbe-bdb7-72d99e59b66b", 1676 + "cells": [ 1677 + { 1678 + "id": "1a63ac74-81eb-4dbf-8e65-8034a5a58c75", 1679 + "cellType": "OTHER_WEIGHT", 1680 + "value": "80" 1681 + }, 1682 + { 1683 + "id": "c789d9b7-beec-4abd-9034-0c25bcb633a5", 1684 + "cellType": "REPS", 1685 + "value": "9" 1686 + } 1687 + ], 1688 + "isCompleted": true 1689 + } 1690 + ] 1691 + }, 1692 + { 1693 + "_links": { 1694 + "measurement": { 1695 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/534954cb-6720-45c4-bf63-a0766142ec6c" 1696 + } 1697 + }, 1698 + "_embedded": {}, 1699 + "id": "797e7a4f-9e65-4114-a17d-7977bd0d22e4", 1700 + "cellSets": [ 1701 + { 1702 + "id": "7f579148-e96a-457c-bd2e-1ce90d67b255", 1703 + "cells": [ 1704 + { 1705 + "id": "73c1879f-c5e7-47c5-8f21-e1bd04034973", 1706 + "cellType": "OTHER_WEIGHT", 1707 + "value": "35" 1708 + }, 1709 + { 1710 + "id": "b82a6a51-9b8b-489f-b1c6-34c62ab35d93", 1711 + "cellType": "REPS", 1712 + "value": "13" 1713 + } 1714 + ], 1715 + "isCompleted": true 1716 + }, 1717 + { 1718 + "id": "1d5a4ae5-8622-46ed-9579-0364ad8fcad8", 1719 + "cells": [ 1720 + { 1721 + "id": "cb4a6d2a-318a-4607-812f-476e605a4f13", 1722 + "cellType": "OTHER_WEIGHT", 1723 + "value": "35" 1724 + }, 1725 + { 1726 + "id": "79f2a2cd-45ed-49c4-8f8b-f70a805972d7", 1727 + "cellType": "REPS", 1728 + "value": "13" 1729 + } 1730 + ], 1731 + "isCompleted": true 1732 + }, 1733 + { 1734 + "id": "5ef09f65-d8c9-479b-b7ee-b20098cfd5e4", 1735 + "cells": [ 1736 + { 1737 + "id": "29368a6b-46f1-4941-a40d-44df4d09df31", 1738 + "cellType": "OTHER_WEIGHT", 1739 + "value": "35" 1740 + }, 1741 + { 1742 + "id": "49365386-1cf3-4b25-ade4-c8def1a3fc32", 1743 + "cellType": "REPS", 1744 + "value": "12" 1745 + } 1746 + ], 1747 + "isCompleted": true 1748 + } 1749 + ] 1750 + }, 1751 + { 1752 + "_links": { 1753 + "measurement": { 1754 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8dc8a29b-674b-43c9-bf6e-46b95f3414be" 1755 + } 1756 + }, 1757 + "_embedded": {}, 1758 + "id": "4c55828a-ac23-4c24-93a1-3b7c22a80c2e", 1759 + "cellSets": [ 1760 + { 1761 + "id": "9a36060b-7991-4e7f-8a96-b4c6aed1eab4", 1762 + "cells": [ 1763 + { 1764 + "id": "13efe0e1-959f-42f6-87de-eac1762f3b8e", 1765 + "cellType": "OTHER_WEIGHT", 1766 + "value": "30" 1767 + }, 1768 + { 1769 + "id": "a80d0da8-b579-4ff7-856f-ea7ed2e082c3", 1770 + "cellType": "REPS", 1771 + "value": "11" 1772 + } 1773 + ], 1774 + "isCompleted": true 1775 + }, 1776 + { 1777 + "id": "f2a6ab19-b84d-45c8-bdf5-5c0e593ae71a", 1778 + "cells": [ 1779 + { 1780 + "id": "8be5c089-4fdc-42c6-8dce-5d16cf4bc379", 1781 + "cellType": "OTHER_WEIGHT", 1782 + "value": "30" 1783 + }, 1784 + { 1785 + "id": "f961534b-c287-4064-83b2-0f201ae671aa", 1786 + "cellType": "REPS", 1787 + "value": "12" 1788 + } 1789 + ], 1790 + "isCompleted": true 1791 + }, 1792 + { 1793 + "id": "96d2d90a-056a-4c44-b5a3-dd3fdb43d6bc", 1794 + "cells": [ 1795 + { 1796 + "id": "d2936c98-b2ba-475f-8f2d-95141bcd4b82", 1797 + "cellType": "OTHER_WEIGHT", 1798 + "value": "35" 1799 + }, 1800 + { 1801 + "id": "2a24d0fc-3389-48af-a2f6-7efe60836f1c", 1802 + "cellType": "REPS", 1803 + "value": "8" 1804 + } 1805 + ], 1806 + "isCompleted": true 1807 + } 1808 + ] 1809 + }, 1810 + { 1811 + "_links": { 1812 + "measurement": { 1813 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b92aa3dd-98e1-4e99-a229-434be54c1ae5" 1814 + } 1815 + }, 1816 + "_embedded": {}, 1817 + "id": "e08e0378-fa66-4342-b0eb-21a3666f379b", 1818 + "cellSets": [ 1819 + { 1820 + "id": "a92606f2-0cde-4c9b-9dd9-e83f28a2c3f5", 1821 + "cells": [ 1822 + { 1823 + "id": "1b9005e1-303e-4c87-b927-e03ef8fe0780", 1824 + "cellType": "OTHER_WEIGHT", 1825 + "value": "40" 1826 + }, 1827 + { 1828 + "id": "a074422b-30b9-4168-8f13-0b04cdd8cc0a", 1829 + "cellType": "REPS", 1830 + "value": "12" 1831 + } 1832 + ], 1833 + "isCompleted": true 1834 + }, 1835 + { 1836 + "id": "96ed7987-50c8-4234-8213-1a426cc4523e", 1837 + "cells": [ 1838 + { 1839 + "id": "0479edd2-4712-4dcf-8abd-175ffa76463d", 1840 + "cellType": "OTHER_WEIGHT", 1841 + "value": "40" 1842 + }, 1843 + { 1844 + "id": "b717e10d-3257-40b7-8312-7df08379ab5b", 1845 + "cellType": "REPS", 1846 + "value": "10" 1847 + } 1848 + ], 1849 + "isCompleted": true 1850 + }, 1851 + { 1852 + "id": "3e45f8b3-5ac4-4d98-8ae5-bd3031d06345", 1853 + "cells": [ 1854 + { 1855 + "id": "f56c0e01-3a11-43fc-8612-ad473061d97d", 1856 + "cellType": "OTHER_WEIGHT", 1857 + "value": "35" 1858 + }, 1859 + { 1860 + "id": "fa65fff9-d5c8-4cfb-aa7e-a36d444259d4", 1861 + "cellType": "REPS", 1862 + "value": "10" 1863 + } 1864 + ], 1865 + "isCompleted": true 1866 + } 1867 + ] 1868 + }, 1869 + { 1870 + "_links": { 1871 + "measurement": { 1872 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4a304d9a-9a7a-440f-bb9a-9fd5cde6b590" 1873 + } 1874 + }, 1875 + "_embedded": {}, 1876 + "id": "6139bc82-d1c6-4a10-a32f-96baab11ecef", 1877 + "cellSets": [ 1878 + { 1879 + "id": "b57ab46a-6449-4906-bf59-bd85a9234e50", 1880 + "cells": [ 1881 + { 1882 + "id": "2922b18a-5ab3-436a-8fc3-184157e1f00d", 1883 + "cellType": "OTHER_WEIGHT", 1884 + "value": "30" 1885 + }, 1886 + { 1887 + "id": "777301eb-5493-4c3f-8a22-6cfafe72495d", 1888 + "cellType": "REPS", 1889 + "value": "8" 1890 + } 1891 + ], 1892 + "isCompleted": true 1893 + }, 1894 + { 1895 + "id": "035c373e-16c2-41cb-9725-d4d2d63da497", 1896 + "cells": [ 1897 + { 1898 + "id": "bb47c448-a953-4153-a444-a2e18b9efa05", 1899 + "cellType": "OTHER_WEIGHT", 1900 + "value": "25" 1901 + }, 1902 + { 1903 + "id": "36510801-fc2e-43fd-a4fb-3a1d801997ad", 1904 + "cellType": "REPS", 1905 + "value": "10" 1906 + } 1907 + ], 1908 + "isCompleted": true 1909 + }, 1910 + { 1911 + "id": "5b657142-08d5-411a-ab8c-7f1ab8ac5cf1", 1912 + "cells": [ 1913 + { 1914 + "id": "802d7ba5-3f73-47d0-b52a-fcb4a0757373", 1915 + "cellType": "OTHER_WEIGHT", 1916 + "value": "25" 1917 + }, 1918 + { 1919 + "id": "8a29b6ab-fabd-4d48-984b-da5623129812", 1920 + "cellType": "REPS", 1921 + "value": "7" 1922 + } 1923 + ], 1924 + "isCompleted": true 1925 + } 1926 + ] 1927 + } 1928 + ] 1929 + }, 1930 + "timezoneId": "Europe/Berlin", 1931 + "id": "5f91749b-34b0-4c6d-be09-f10bee3b0fd6", 1932 + "created": "2024-11-20T17:01:58.274Z", 1933 + "lastChanged": "2024-11-20T17:02:22.772Z", 1934 + "name": { 1935 + "en": "Bizeps/R\u00fccken" 1936 + }, 1937 + "access": "PRIVATE", 1938 + "startDate": "2024-11-20T16:07:54.566Z", 1939 + "endDate": "2024-11-20T17:01:58.254Z", 1940 + "logType": "WORKOUT" 1941 + }, 1942 + { 1943 + "_links": { 1944 + "self": { 1945 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/b157b5ab-48fa-45cc-998e-00bb4599b563" 1946 + }, 1947 + "user": { 1948 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 1949 + } 1950 + }, 1951 + "_embedded": { 1952 + "cellSetGroup": [ 1953 + { 1954 + "_links": {}, 1955 + "_embedded": {}, 1956 + "id": "8d79c437-c702-4704-81af-4bd17980e994", 1957 + "cellSets": [ 1958 + { 1959 + "id": "994eaff8-0aa8-42ae-9355-99f4f8de929b", 1960 + "cells": [ 1961 + { 1962 + "id": "5279b584-bf5b-4f1b-82bf-b8d2e874ae4d", 1963 + "cellType": "NOTE", 1964 + "value": "Just another note" 1965 + } 1966 + ] 1967 + } 1968 + ] 1969 + }, 1970 + { 1971 + "_links": { 1972 + "measurement": { 1973 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 1974 + } 1975 + }, 1976 + "_embedded": {}, 1977 + "id": "3ad980d1-6463-4be7-8657-08892ed8938f", 1978 + "cellSets": [ 1979 + { 1980 + "id": "acec6092-4236-47fc-8974-54fccc57d582", 1981 + "cells": [ 1982 + { 1983 + "id": "d536d947-6021-46d4-8144-d885efeb1b8d", 1984 + "cellType": "BARBELL_WEIGHT", 1985 + "value": "30" 1986 + }, 1987 + { 1988 + "id": "8c038916-e0ed-49e7-873c-eda96edf3a93", 1989 + "cellType": "REPS", 1990 + "value": "10" 1991 + } 1992 + ], 1993 + "isCompleted": true 1994 + }, 1995 + { 1996 + "id": "c91976a1-4223-4917-8bbe-a471f38d1411", 1997 + "cells": [ 1998 + { 1999 + "id": "259fb3d9-ee0e-4078-b2a2-9019c14d8c0e", 2000 + "cellType": "BARBELL_WEIGHT", 2001 + "value": "40" 2002 + }, 2003 + { 2004 + "id": "3dce4644-4009-446a-9f3a-fcd57d627e19", 2005 + "cellType": "REPS", 2006 + "value": "12" 2007 + } 2008 + ], 2009 + "isCompleted": true 2010 + }, 2011 + { 2012 + "id": "efdd5ff4-33c0-4e8d-b198-08c856a183a8", 2013 + "cells": [ 2014 + { 2015 + "id": "c4f07244-3877-400c-8679-6167f7b9ae49", 2016 + "cellType": "BARBELL_WEIGHT", 2017 + "value": "40" 2018 + }, 2019 + { 2020 + "id": "e054e2aa-5bf7-4232-927e-012877722f3e", 2021 + "cellType": "REPS", 2022 + "value": "9" 2023 + } 2024 + ], 2025 + "isCompleted": true 2026 + }, 2027 + { 2028 + "id": "eb229c8f-2b20-4fdc-b223-5f322db19969", 2029 + "cells": [ 2030 + { 2031 + "id": "b5d274a6-ceea-4e79-92e9-9b4a3533c5a9", 2032 + "cellType": "BARBELL_WEIGHT", 2033 + "value": "40" 2034 + }, 2035 + { 2036 + "id": "78c6eb96-c81b-425f-b3b0-5a6102555d49", 2037 + "cellType": "REPS", 2038 + "value": "8" 2039 + } 2040 + ], 2041 + "isCompleted": true 2042 + } 2043 + ] 2044 + }, 2045 + { 2046 + "_links": { 2047 + "measurement": { 2048 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6ae27da7-92b9-4af9-b2a9-e0afd827c188" 2049 + } 2050 + }, 2051 + "_embedded": {}, 2052 + "id": "3f82b56d-bb35-4336-a568-d16a8e86f15d", 2053 + "cellSets": [ 2054 + { 2055 + "id": "5803dc38-3870-4f80-ab7d-2657fdc93b62", 2056 + "cells": [ 2057 + { 2058 + "id": "9b8d5d7d-01e5-4b3b-8fd6-6e1a343c27ae", 2059 + "cellType": "OTHER_WEIGHT", 2060 + "value": "50" 2061 + }, 2062 + { 2063 + "id": "c75a4638-dfdd-4881-a0b6-32ad0aca214a", 2064 + "cellType": "REPS", 2065 + "value": "3" 2066 + } 2067 + ], 2068 + "isCompleted": true 2069 + }, 2070 + { 2071 + "id": "84dfc421-c877-4866-b686-5b81da9c9d06", 2072 + "cells": [ 2073 + { 2074 + "id": "35fc39ab-be07-4a47-a7be-d6351d02837d", 2075 + "cellType": "OTHER_WEIGHT", 2076 + "value": "40" 2077 + }, 2078 + { 2079 + "id": "a503c6dd-5cc4-463a-8362-71227bbd3188", 2080 + "cellType": "REPS", 2081 + "value": "14" 2082 + } 2083 + ], 2084 + "isCompleted": true 2085 + }, 2086 + { 2087 + "id": "1eec407e-6597-4601-8805-06f605bea837", 2088 + "cells": [ 2089 + { 2090 + "id": "1e3e99ea-f86e-46d4-86cb-865af2ac9037", 2091 + "cellType": "OTHER_WEIGHT", 2092 + "value": "45" 2093 + }, 2094 + { 2095 + "id": "43689c77-493a-42dd-994b-c4f8d3574d50", 2096 + "cellType": "REPS", 2097 + "value": "7" 2098 + } 2099 + ], 2100 + "isCompleted": true 2101 + }, 2102 + { 2103 + "id": "0800ae2e-c48a-4fb4-ab42-bb8bb561908d", 2104 + "cells": [ 2105 + { 2106 + "id": "676d2bd8-b00d-4245-899d-03d50d44b83b", 2107 + "cellType": "OTHER_WEIGHT", 2108 + "value": "45" 2109 + }, 2110 + { 2111 + "id": "09ab3eee-8552-4d6c-ae03-c6f5ba09354e", 2112 + "cellType": "REPS", 2113 + "value": "8" 2114 + } 2115 + ], 2116 + "isCompleted": true 2117 + } 2118 + ] 2119 + }, 2120 + { 2121 + "_links": { 2122 + "measurement": { 2123 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a60fd1af-31d7-4235-92cd-57f76d1c39e9" 2124 + } 2125 + }, 2126 + "_embedded": {}, 2127 + "id": "b26a47f3-d669-442b-a1ec-8c1c50cbb924", 2128 + "cellSets": [ 2129 + { 2130 + "id": "e8b9474e-e7e3-4e24-b1bc-dd1b7dbc1fd8", 2131 + "cells": [ 2132 + { 2133 + "id": "a8fc112c-b107-49e3-bcde-b014a72d2639", 2134 + "cellType": "OTHER_WEIGHT", 2135 + "value": "30" 2136 + }, 2137 + { 2138 + "id": "7165048d-faf3-47ca-9651-a04255a5d5ae", 2139 + "cellType": "REPS", 2140 + "value": "10" 2141 + } 2142 + ], 2143 + "isCompleted": true 2144 + }, 2145 + { 2146 + "id": "3489da77-c4a3-48ca-9451-3a651c498de2", 2147 + "cells": [ 2148 + { 2149 + "id": "342aa1b1-d46c-4715-9911-144c1dab0159", 2150 + "cellType": "OTHER_WEIGHT", 2151 + "value": "35" 2152 + }, 2153 + { 2154 + "id": "0c0174b8-6c43-47e1-a342-3cc783d313b4", 2155 + "cellType": "REPS", 2156 + "value": "10" 2157 + } 2158 + ], 2159 + "isCompleted": true 2160 + }, 2161 + { 2162 + "id": "6e86d0c4-0724-4378-8f83-1718b5038c4c", 2163 + "cells": [ 2164 + { 2165 + "id": "c70fde04-9841-4734-90b4-72e55675e7b9", 2166 + "cellType": "OTHER_WEIGHT", 2167 + "value": "35" 2168 + }, 2169 + { 2170 + "id": "5e5df9ce-5ca5-4fb9-969b-9ac9052d3e3e", 2171 + "cellType": "REPS", 2172 + "value": "10" 2173 + } 2174 + ], 2175 + "isCompleted": true 2176 + } 2177 + ] 2178 + }, 2179 + { 2180 + "_links": { 2181 + "measurement": { 2182 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/737d7664-5231-44f9-a112-a4c087f67675" 2183 + } 2184 + }, 2185 + "_embedded": {}, 2186 + "id": "17c722c2-cda9-4fcb-bfb5-b4402f3f7f19", 2187 + "cellSets": [ 2188 + { 2189 + "id": "a203df22-451e-4913-951e-a5363a6de8e5", 2190 + "cells": [ 2191 + { 2192 + "id": "9ff21fa6-3858-4e6b-81fb-eb098b336cf9", 2193 + "cellType": "DUMBBELL_WEIGHT", 2194 + "value": "14" 2195 + }, 2196 + { 2197 + "id": "4d4ba8bd-d3b2-4a06-aaa0-62b50673c0ef", 2198 + "cellType": "REPS", 2199 + "value": "6" 2200 + } 2201 + ], 2202 + "isCompleted": true 2203 + }, 2204 + { 2205 + "id": "a91c9120-8781-478e-a174-babea6b91666", 2206 + "cells": [ 2207 + { 2208 + "id": "a78f08ae-4b36-44f1-9f31-ece0d79ad39d", 2209 + "cellType": "DUMBBELL_WEIGHT", 2210 + "value": "14" 2211 + }, 2212 + { 2213 + "id": "53a52a51-2999-4c11-8152-ce9f7b8c74a0", 2214 + "cellType": "REPS", 2215 + "value": "6" 2216 + } 2217 + ], 2218 + "isCompleted": true 2219 + } 2220 + ] 2221 + }, 2222 + { 2223 + "_links": { 2224 + "measurement": { 2225 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/91efd24a-9acc-40dd-8f7f-16a1ab175f33" 2226 + } 2227 + }, 2228 + "_embedded": {}, 2229 + "id": "a7f04fe3-0d4f-4f96-bd90-a1df38de5e09", 2230 + "cellSets": [ 2231 + { 2232 + "id": "b24da8b2-b165-411c-81df-531079e61c66", 2233 + "cells": [ 2234 + { 2235 + "id": "8b4b4956-4e51-4aed-908f-7ab4577c2fb3", 2236 + "cellType": "BARBELL_WEIGHT", 2237 + "value": "35" 2238 + }, 2239 + { 2240 + "id": "e3442043-476f-491c-a769-ab1af975375e", 2241 + "cellType": "REPS", 2242 + "value": "15" 2243 + } 2244 + ], 2245 + "isCompleted": true 2246 + }, 2247 + { 2248 + "id": "217fc6ac-c39e-4a25-83c6-90eb99b1725e", 2249 + "cells": [ 2250 + { 2251 + "id": "4a5636fa-2cdf-4068-bfaf-c6d2ab7bfaf1", 2252 + "cellType": "BARBELL_WEIGHT", 2253 + "value": "40" 2254 + }, 2255 + { 2256 + "id": "c55ffa5a-be89-44e5-9551-3e3efad06319", 2257 + "cellType": "REPS", 2258 + "value": "11" 2259 + } 2260 + ], 2261 + "isCompleted": true 2262 + }, 2263 + { 2264 + "id": "3a88e626-2da4-4b79-9f18-7797faea1e5f", 2265 + "cells": [ 2266 + { 2267 + "id": "136e4d48-76b7-4346-aa8a-82051b0d01d0", 2268 + "cellType": "BARBELL_WEIGHT", 2269 + "value": "40" 2270 + }, 2271 + { 2272 + "id": "4a059d2e-b750-4e77-a2f1-1c267d6a2e00", 2273 + "cellType": "REPS", 2274 + "value": "8" 2275 + } 2276 + ], 2277 + "isCompleted": true 2278 + }, 2279 + { 2280 + "id": "94d0fae4-40eb-476c-8603-34a018f00ecd", 2281 + "cells": [ 2282 + { 2283 + "id": "cc7f05e2-0ca7-4aba-80f7-488049b814cb", 2284 + "cellType": "BARBELL_WEIGHT", 2285 + "value": "40" 2286 + }, 2287 + { 2288 + "id": "b2851c89-d250-4fdb-a111-3d474be0227a", 2289 + "cellType": "REPS", 2290 + "value": "8" 2291 + } 2292 + ], 2293 + "isCompleted": true 2294 + } 2295 + ] 2296 + } 2297 + ] 2298 + }, 2299 + "timezoneId": "Europe/Berlin", 2300 + "id": "b157b5ab-48fa-45cc-998e-00bb4599b563", 2301 + "created": "2024-12-02T17:34:29.575Z", 2302 + "lastChanged": "2024-12-02T20:54:41.558Z", 2303 + "name": { 2304 + "en": "Brust/Trizeps" 2305 + }, 2306 + "access": "PRIVATE", 2307 + "startDate": "2024-12-02T16:26:27.629Z", 2308 + "endDate": "2024-12-02T17:34:29.631Z", 2309 + "logType": "WORKOUT" 2310 + }, 2311 + { 2312 + "_links": { 2313 + "self": { 2314 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/4bb4081f-a729-4016-96c1-b837ae05100f" 2315 + }, 2316 + "user": { 2317 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 2318 + }, 2319 + "template": { 2320 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/328042b7-335e-4d61-8f3f-eaef8597d869" 2321 + } 2322 + }, 2323 + "_embedded": { 2324 + "cellSetGroup": [ 2325 + { 2326 + "_links": { 2327 + "measurement": { 2328 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a8121bda-a232-4da2-be80-85bbe05c53d7" 2329 + } 2330 + }, 2331 + "_embedded": {}, 2332 + "id": "6a0929b8-92e4-4c90-a62f-5b381fb2e9e0", 2333 + "cellSets": [ 2334 + { 2335 + "id": "0257e08c-19b8-4e93-8554-293dc363c087", 2336 + "cells": [ 2337 + { 2338 + "id": "1ba5deda-efb7-4b25-af7a-b1dd41eaf2c3", 2339 + "cellType": "OTHER_WEIGHT", 2340 + "value": "60" 2341 + }, 2342 + { 2343 + "id": "ee38ccbb-bbbb-4d4b-adc9-bf33296b9807", 2344 + "cellType": "REPS", 2345 + "value": "10" 2346 + } 2347 + ], 2348 + "isCompleted": true 2349 + }, 2350 + { 2351 + "id": "cf5f0131-94bf-4a9c-ace3-3bb8972f4adb", 2352 + "cells": [ 2353 + { 2354 + "id": "69071b3e-d5bf-4f60-99ab-0a369e626401", 2355 + "cellType": "OTHER_WEIGHT", 2356 + "value": "70" 2357 + }, 2358 + { 2359 + "id": "36c1ea1c-8d84-489a-9a1e-6255a57cdbe2", 2360 + "cellType": "REPS", 2361 + "value": "10" 2362 + } 2363 + ], 2364 + "isCompleted": true 2365 + }, 2366 + { 2367 + "id": "3f7839ea-5fff-42bb-8444-74dfc4f51de5", 2368 + "cells": [ 2369 + { 2370 + "id": "7ff3575a-4652-400b-8667-e0d46fe5c957", 2371 + "cellType": "OTHER_WEIGHT", 2372 + "value": "70" 2373 + }, 2374 + { 2375 + "id": "a503c8d4-1258-4fe8-bb08-e3ed48572346", 2376 + "cellType": "REPS", 2377 + "value": "10" 2378 + } 2379 + ], 2380 + "isCompleted": true 2381 + } 2382 + ] 2383 + }, 2384 + { 2385 + "_links": { 2386 + "measurement": { 2387 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/534954cb-6720-45c4-bf63-a0766142ec6c" 2388 + } 2389 + }, 2390 + "_embedded": {}, 2391 + "id": "e70476e1-98cc-4e11-a14e-8844c7f63daf", 2392 + "cellSets": [ 2393 + { 2394 + "id": "8700aad5-51cb-4a8c-abb6-2973aba37564", 2395 + "cells": [ 2396 + { 2397 + "id": "ce485bcb-e5ca-457e-b423-90294f25a44e", 2398 + "cellType": "OTHER_WEIGHT", 2399 + "value": "45" 2400 + }, 2401 + { 2402 + "id": "f7537b14-bfc1-4dfe-832f-177946b0fca5", 2403 + "cellType": "REPS", 2404 + "value": "11" 2405 + } 2406 + ], 2407 + "isCompleted": true 2408 + }, 2409 + { 2410 + "id": "1753dbe6-17c0-4920-8e57-2d6b4896ceda", 2411 + "cells": [ 2412 + { 2413 + "id": "19232167-6403-4698-a02f-a8b802f5a505", 2414 + "cellType": "OTHER_WEIGHT", 2415 + "value": "45" 2416 + }, 2417 + { 2418 + "id": "08855be9-f34e-466f-b650-af05f5515e3a", 2419 + "cellType": "REPS", 2420 + "value": "13" 2421 + } 2422 + ], 2423 + "isCompleted": true 2424 + }, 2425 + { 2426 + "id": "5bbcbb8e-3d79-4083-be39-7b21da17898e", 2427 + "cells": [ 2428 + { 2429 + "id": "77648148-c69c-4757-9d36-0af7cd7de881", 2430 + "cellType": "OTHER_WEIGHT", 2431 + "value": "45" 2432 + }, 2433 + { 2434 + "id": "8b6632e5-f50e-4e74-be4b-188696cb81da", 2435 + "cellType": "REPS", 2436 + "value": "11" 2437 + } 2438 + ], 2439 + "isCompleted": true 2440 + }, 2441 + { 2442 + "id": "4cf7eab9-061d-4cf5-9be0-3fbb3e4ce237", 2443 + "cells": [ 2444 + { 2445 + "id": "17df05c6-72e8-477b-83c1-9782dfa88de0", 2446 + "cellType": "OTHER_WEIGHT", 2447 + "value": "45" 2448 + }, 2449 + { 2450 + "id": "206f4e2f-70da-4fee-bf73-c0e91affd004", 2451 + "cellType": "REPS", 2452 + "value": "12" 2453 + } 2454 + ], 2455 + "isCompleted": true 2456 + } 2457 + ] 2458 + }, 2459 + { 2460 + "_links": { 2461 + "measurement": { 2462 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8dc8a29b-674b-43c9-bf6e-46b95f3414be" 2463 + } 2464 + }, 2465 + "_embedded": {}, 2466 + "id": "84aa0a48-17ce-4366-93d6-54571af8d6f9", 2467 + "cellSets": [ 2468 + { 2469 + "id": "6c8b3e7c-23f6-480a-be29-5db98593314e", 2470 + "cells": [ 2471 + { 2472 + "id": "5b949409-f265-48f6-a711-6ef9fb2e9522", 2473 + "cellType": "OTHER_WEIGHT", 2474 + "value": "30" 2475 + }, 2476 + { 2477 + "id": "899286bd-8fb9-467c-b89c-f7620f1b4092", 2478 + "cellType": "REPS", 2479 + "value": "17" 2480 + } 2481 + ], 2482 + "isCompleted": true 2483 + }, 2484 + { 2485 + "id": "f2f39079-f792-4cb8-b93d-f8865b3aa321", 2486 + "cells": [ 2487 + { 2488 + "id": "162f88ed-0673-4e1a-b9ac-4439832ef63e", 2489 + "cellType": "OTHER_WEIGHT", 2490 + "value": "35" 2491 + }, 2492 + { 2493 + "id": "8783966c-54d7-42bf-898f-9168c239f898", 2494 + "cellType": "REPS", 2495 + "value": "12" 2496 + } 2497 + ], 2498 + "isCompleted": true 2499 + }, 2500 + { 2501 + "id": "557dcbd2-c2f0-4628-a1d9-2f2781a9c7d2", 2502 + "cells": [ 2503 + { 2504 + "id": "3ee61e3e-2a09-4806-aec8-b97c76fbe547", 2505 + "cellType": "OTHER_WEIGHT", 2506 + "value": "35" 2507 + }, 2508 + { 2509 + "id": "ad370220-f3ae-475b-89b7-9128b21e52e1", 2510 + "cellType": "REPS", 2511 + "value": "8" 2512 + } 2513 + ], 2514 + "isCompleted": true 2515 + } 2516 + ] 2517 + }, 2518 + { 2519 + "_links": { 2520 + "measurement": { 2521 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4a304d9a-9a7a-440f-bb9a-9fd5cde6b590" 2522 + } 2523 + }, 2524 + "_embedded": {}, 2525 + "id": "6c91dbaa-4e4a-4a5a-b8df-462548349052", 2526 + "cellSets": [ 2527 + { 2528 + "id": "73dfd64f-551c-427e-88dd-0c68ce14a867", 2529 + "cells": [ 2530 + { 2531 + "id": "1e523a9c-844f-415b-b478-a0d7bbedff37", 2532 + "cellType": "OTHER_WEIGHT", 2533 + "value": "30" 2534 + }, 2535 + { 2536 + "id": "d8604549-874d-4fba-b719-09b9e673da44", 2537 + "cellType": "REPS", 2538 + "value": "8" 2539 + } 2540 + ], 2541 + "isCompleted": true 2542 + }, 2543 + { 2544 + "id": "2411035b-062c-4182-93cc-81b13c80a85e", 2545 + "cells": [ 2546 + { 2547 + "id": "eebe268d-2582-4f62-b552-1c7730a32fe4", 2548 + "cellType": "OTHER_WEIGHT", 2549 + "value": "25" 2550 + }, 2551 + { 2552 + "id": "89eba256-9767-4e52-a149-3ee4b1615a74", 2553 + "cellType": "REPS", 2554 + "value": "9" 2555 + } 2556 + ], 2557 + "isCompleted": true 2558 + }, 2559 + { 2560 + "id": "de56a498-3ec2-453a-9586-f577243ca76a", 2561 + "cells": [ 2562 + { 2563 + "id": "4ba6fff7-27e6-48de-b2d2-d16862c22887", 2564 + "cellType": "OTHER_WEIGHT", 2565 + "value": "25" 2566 + }, 2567 + { 2568 + "id": "1eb51a56-4ce8-4c55-81d0-e05969833fdd", 2569 + "cellType": "REPS", 2570 + "value": "5" 2571 + } 2572 + ], 2573 + "isCompleted": true 2574 + } 2575 + ] 2576 + }, 2577 + { 2578 + "_links": { 2579 + "measurement": { 2580 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4247db47-0f44-4314-851d-8ab4dce3317d" 2581 + } 2582 + }, 2583 + "_embedded": {}, 2584 + "id": "773b26ab-e0ec-4bed-8918-0a8b836953f1", 2585 + "cellSets": [ 2586 + { 2587 + "id": "865b901a-4ffe-44a6-854c-f7000c57f1e1", 2588 + "cells": [ 2589 + { 2590 + "id": "55efa196-71aa-496c-b99b-c1678e509bbf", 2591 + "cellType": "NOTE", 2592 + "value": "Yet \u00e4nother note" 2593 + } 2594 + ], 2595 + "isCompleted": true 2596 + }, 2597 + { 2598 + "id": "93974c6f-d5dd-44d7-93e2-c9fb39aecf14", 2599 + "cells": [ 2600 + { 2601 + "id": "d21ebd2e-d084-4607-88a5-4d98abde2e34", 2602 + "cellType": "DUMBBELL_WEIGHT", 2603 + "value": "10" 2604 + }, 2605 + { 2606 + "id": "b6b2e75e-664b-404f-988f-49774d8eafa5", 2607 + "cellType": "REPS", 2608 + "value": "6" 2609 + } 2610 + ], 2611 + "isCompleted": true 2612 + }, 2613 + { 2614 + "id": "e0ac17e3-d74b-477a-a62c-f5fe81fb58ea", 2615 + "cells": [ 2616 + { 2617 + "id": "33880206-b0e6-4907-8c2e-600e24791567", 2618 + "cellType": "DUMBBELL_WEIGHT", 2619 + "value": "10" 2620 + }, 2621 + { 2622 + "id": "2668a579-818a-4f71-87fb-cd07de760dde", 2623 + "cellType": "REPS", 2624 + "value": "5" 2625 + } 2626 + ], 2627 + "isCompleted": true 2628 + }, 2629 + { 2630 + "id": "2bf1ec4f-fcbe-4fa7-8532-46daab17d5e6", 2631 + "cells": [ 2632 + { 2633 + "id": "b97f9883-e506-4cd4-8f63-f3226657ef35", 2634 + "cellType": "DUMBBELL_WEIGHT", 2635 + "value": "10" 2636 + }, 2637 + { 2638 + "id": "bb9b5c82-2c21-4734-8581-d26ee0fb26d6", 2639 + "cellType": "REPS", 2640 + "value": "3" 2641 + } 2642 + ], 2643 + "isCompleted": true 2644 + } 2645 + ] 2646 + } 2647 + ] 2648 + }, 2649 + "timezoneId": "Europe/Berlin", 2650 + "id": "4bb4081f-a729-4016-96c1-b837ae05100f", 2651 + "created": "2024-12-04T17:21:20.07Z", 2652 + "lastChanged": "2024-12-04T17:21:20.07Z", 2653 + "name": { 2654 + "en": "Bizeps/R\u00fccken" 2655 + }, 2656 + "access": "PRIVATE", 2657 + "startDate": "2024-12-04T16:23:43.965Z", 2658 + "endDate": "2024-12-04T17:21:20.423Z", 2659 + "logType": "WORKOUT" 2660 + }, 2661 + { 2662 + "_links": { 2663 + "self": { 2664 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/87148467-f4ef-47e2-acb1-7723bb017696" 2665 + }, 2666 + "user": { 2667 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 2668 + }, 2669 + "template": { 2670 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/fdfbc66d-6d9c-4cdd-a871-fe916d6368cd" 2671 + } 2672 + }, 2673 + "_embedded": { 2674 + "cellSetGroup": [ 2675 + { 2676 + "_links": {}, 2677 + "_embedded": {}, 2678 + "id": "89cc66f5-5096-4936-87eb-2218e3dfce3f", 2679 + "cellSets": [ 2680 + { 2681 + "id": "38d24d97-44ac-431b-b881-35904fffdc13", 2682 + "cells": [ 2683 + { 2684 + "id": "b5581ba5-3921-40d1-9a01-2cd02a7c8c25", 2685 + "cellType": "NOTE", 2686 + "value": "Just another note" 2687 + } 2688 + ] 2689 + } 2690 + ] 2691 + }, 2692 + { 2693 + "_links": { 2694 + "measurement": { 2695 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 2696 + } 2697 + }, 2698 + "_embedded": {}, 2699 + "id": "9fa5af65-ee95-4c72-bd00-9358eaa11ef3", 2700 + "cellSets": [ 2701 + { 2702 + "id": "4cddae7c-736e-4bc8-b4ee-447635b4e8a9", 2703 + "cells": [ 2704 + { 2705 + "id": "5e42e9f1-ab3a-4220-ba12-ad2c9ef05f9b", 2706 + "cellType": "BARBELL_WEIGHT", 2707 + "value": "30" 2708 + }, 2709 + { 2710 + "id": "76c99bda-dd50-43b2-87a3-fc20bdaa9f53", 2711 + "cellType": "REPS", 2712 + "value": "16" 2713 + } 2714 + ], 2715 + "isCompleted": true 2716 + }, 2717 + { 2718 + "id": "a8d5a01e-dc1f-4c16-b304-a3c131176cc1", 2719 + "cells": [ 2720 + { 2721 + "id": "0bd69451-cca0-4262-a3bd-f40302e9f433", 2722 + "cellType": "BARBELL_WEIGHT", 2723 + "value": "40" 2724 + }, 2725 + { 2726 + "id": "27e43a94-ff52-437b-a09e-841c0154a4aa", 2727 + "cellType": "REPS", 2728 + "value": "12" 2729 + } 2730 + ], 2731 + "isCompleted": true 2732 + }, 2733 + { 2734 + "id": "cc69257b-ecf1-48a6-9f99-2ba157b63029", 2735 + "cells": [ 2736 + { 2737 + "id": "e5c8ac11-853d-4415-8f1b-383ef2b17fa6", 2738 + "cellType": "BARBELL_WEIGHT", 2739 + "value": "40" 2740 + }, 2741 + { 2742 + "id": "192ab958-337f-45a3-b294-ffd3a2c7404d", 2743 + "cellType": "REPS", 2744 + "value": "10" 2745 + } 2746 + ], 2747 + "isCompleted": true 2748 + }, 2749 + { 2750 + "id": "3600cc0c-02e5-4b3a-be8c-186f929aa83f", 2751 + "cells": [ 2752 + { 2753 + "id": "05ca5b9b-7c51-46f1-9b15-a357ff96f4ca", 2754 + "cellType": "BARBELL_WEIGHT", 2755 + "value": "40" 2756 + }, 2757 + { 2758 + "id": "0b8368cf-d4d8-491a-943d-d2b44765a92e", 2759 + "cellType": "REPS", 2760 + "value": "8" 2761 + } 2762 + ], 2763 + "isCompleted": true 2764 + } 2765 + ] 2766 + }, 2767 + { 2768 + "_links": { 2769 + "measurement": { 2770 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6ae27da7-92b9-4af9-b2a9-e0afd827c188" 2771 + } 2772 + }, 2773 + "_embedded": {}, 2774 + "id": "02ae7ea4-e5a3-4c1e-a4c8-8618dbebcdb8", 2775 + "cellSets": [ 2776 + { 2777 + "id": "31200602-1d6c-4de7-ad50-79ebb0beb8f4", 2778 + "cells": [ 2779 + { 2780 + "id": "0c8989db-a419-4592-9fcd-65d4d0d557d3", 2781 + "cellType": "OTHER_WEIGHT", 2782 + "value": "45" 2783 + }, 2784 + { 2785 + "id": "ead93fc0-f67f-487c-ac4b-2b3301e49f3b", 2786 + "cellType": "REPS", 2787 + "value": "12" 2788 + } 2789 + ], 2790 + "isCompleted": true 2791 + }, 2792 + { 2793 + "id": "0412c2c5-d59b-462d-beb3-9db4ec9fad4a", 2794 + "cells": [ 2795 + { 2796 + "id": "141c00d7-4fcd-49e9-9a26-9d19d6be17dc", 2797 + "cellType": "OTHER_WEIGHT", 2798 + "value": "45" 2799 + }, 2800 + { 2801 + "id": "b1a94e03-3797-4fa0-95b0-c9824fa2e3d0", 2802 + "cellType": "REPS", 2803 + "value": "7" 2804 + } 2805 + ], 2806 + "isCompleted": true 2807 + }, 2808 + { 2809 + "id": "96f0e257-1704-45e0-b298-50900339bbd9", 2810 + "cells": [ 2811 + { 2812 + "id": "392d8bc6-1fb4-4bdc-9ad8-f588285a196a", 2813 + "cellType": "OTHER_WEIGHT", 2814 + "value": "45" 2815 + }, 2816 + { 2817 + "id": "b2e04ec0-df73-4e9f-b697-705589091b61", 2818 + "cellType": "REPS", 2819 + "value": "10" 2820 + } 2821 + ], 2822 + "isCompleted": true 2823 + } 2824 + ] 2825 + }, 2826 + { 2827 + "_links": { 2828 + "measurement": { 2829 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a60fd1af-31d7-4235-92cd-57f76d1c39e9" 2830 + } 2831 + }, 2832 + "_embedded": {}, 2833 + "id": "b3221662-e5f2-4389-8870-4d68b013d538", 2834 + "cellSets": [ 2835 + { 2836 + "id": "822d28e6-285a-431f-ab59-9d98b50410db", 2837 + "cells": [ 2838 + { 2839 + "id": "f562bdbf-af2f-451e-9299-edebaac73e40", 2840 + "cellType": "OTHER_WEIGHT", 2841 + "value": "35" 2842 + }, 2843 + { 2844 + "id": "4bf07578-75cc-4391-8566-7ffe2910559c", 2845 + "cellType": "REPS", 2846 + "value": "10" 2847 + } 2848 + ], 2849 + "isCompleted": true 2850 + }, 2851 + { 2852 + "id": "96aa5450-08b9-48f8-99f4-6f11b3448b41", 2853 + "cells": [ 2854 + { 2855 + "id": "fed6d9e7-f7d8-493c-8f6f-d75a83ad34c2", 2856 + "cellType": "OTHER_WEIGHT", 2857 + "value": "35" 2858 + }, 2859 + { 2860 + "id": "215228ad-b0ab-4600-a5db-7ea5f7b24bd3", 2861 + "cellType": "REPS", 2862 + "value": "10" 2863 + } 2864 + ], 2865 + "isCompleted": true 2866 + }, 2867 + { 2868 + "id": "c827b58e-7139-418c-af2c-64d2273c933f", 2869 + "cells": [ 2870 + { 2871 + "id": "4c00fb12-bf15-4f92-85e5-19980a85b49a", 2872 + "cellType": "OTHER_WEIGHT", 2873 + "value": "35" 2874 + }, 2875 + { 2876 + "id": "9bd8bbb7-c417-4841-bff0-fe615a14609f", 2877 + "cellType": "REPS", 2878 + "value": "9" 2879 + } 2880 + ], 2881 + "isCompleted": true 2882 + } 2883 + ] 2884 + }, 2885 + { 2886 + "_links": { 2887 + "measurement": { 2888 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/737d7664-5231-44f9-a112-a4c087f67675" 2889 + } 2890 + }, 2891 + "_embedded": {}, 2892 + "id": "fa237632-6633-4613-ab1c-c8583a2a4ca1", 2893 + "cellSets": [ 2894 + { 2895 + "id": "0167b71b-5b00-4d54-8a6a-6ca4e761a6f3", 2896 + "cells": [ 2897 + { 2898 + "id": "cac35535-1702-4957-8175-cef5e1ccc43e", 2899 + "cellType": "DUMBBELL_WEIGHT", 2900 + "value": "14" 2901 + }, 2902 + { 2903 + "id": "54b9aa98-ac66-4d32-837e-5123140a3f51", 2904 + "cellType": "REPS", 2905 + "value": "8" 2906 + } 2907 + ], 2908 + "isCompleted": true 2909 + }, 2910 + { 2911 + "id": "b3e8ec7f-3559-41be-a976-ca95f741406c", 2912 + "cells": [ 2913 + { 2914 + "id": "ede29848-ef2a-4517-8aad-acbcc623567b", 2915 + "cellType": "DUMBBELL_WEIGHT", 2916 + "value": "14" 2917 + }, 2918 + { 2919 + "id": "1caf3739-2d91-467a-b591-72c6799fcac8", 2920 + "cellType": "REPS", 2921 + "value": "8" 2922 + } 2923 + ], 2924 + "isCompleted": true 2925 + }, 2926 + { 2927 + "id": "d181f550-3e7e-4991-9e8d-55c8232e0b34", 2928 + "cells": [ 2929 + { 2930 + "id": "d31d09ad-92de-43cd-8ab0-92c5ac951b2a", 2931 + "cellType": "DUMBBELL_WEIGHT", 2932 + "value": "7" 2933 + }, 2934 + { 2935 + "id": "b3a4414e-d27c-4240-b272-f1c8587e7e66", 2936 + "cellType": "REPS", 2937 + "value": "7" 2938 + } 2939 + ], 2940 + "isCompleted": true 2941 + } 2942 + ] 2943 + }, 2944 + { 2945 + "_links": { 2946 + "measurement": { 2947 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/91efd24a-9acc-40dd-8f7f-16a1ab175f33" 2948 + } 2949 + }, 2950 + "_embedded": {}, 2951 + "id": "9cf26159-2a11-437c-9574-a500e5e8975c", 2952 + "cellSets": [ 2953 + { 2954 + "id": "68100dcc-b5b0-4308-bccf-e3878bff02be", 2955 + "cells": [ 2956 + { 2957 + "id": "b59d4244-4817-4714-9760-fa4911d96331", 2958 + "cellType": "BARBELL_WEIGHT", 2959 + "value": "35" 2960 + }, 2961 + { 2962 + "id": "43868e06-badd-4f32-a82d-3350aa1e351d", 2963 + "cellType": "REPS", 2964 + "value": "15" 2965 + } 2966 + ], 2967 + "isCompleted": true 2968 + }, 2969 + { 2970 + "id": "be5f5f06-8e8f-4bb1-92d8-f44ec6d34f60", 2971 + "cells": [ 2972 + { 2973 + "id": "c2d1b0c0-b699-4c03-b689-5abfa6ce57d5", 2974 + "cellType": "BARBELL_WEIGHT", 2975 + "value": "40" 2976 + }, 2977 + { 2978 + "id": "6f2c3db6-4e79-4651-ba76-563de07a13d4", 2979 + "cellType": "REPS", 2980 + "value": "10" 2981 + } 2982 + ], 2983 + "isCompleted": true 2984 + }, 2985 + { 2986 + "id": "60246caa-a0e3-4edb-9526-a3f79a4fcab8", 2987 + "cells": [ 2988 + { 2989 + "id": "ae00c458-69b5-4c2a-8af9-94a2d2726683", 2990 + "cellType": "BARBELL_WEIGHT", 2991 + "value": "40" 2992 + }, 2993 + { 2994 + "id": "b0c6e220-8970-491b-9385-f27fe2350f33", 2995 + "cellType": "REPS", 2996 + "value": "11" 2997 + } 2998 + ], 2999 + "isCompleted": true 3000 + } 3001 + ] 3002 + } 3003 + ] 3004 + }, 3005 + "timezoneId": "Europe/Berlin", 3006 + "id": "87148467-f4ef-47e2-acb1-7723bb017696", 3007 + "created": "2024-12-06T17:46:59.597Z", 3008 + "lastChanged": "2024-12-06T17:46:59.597Z", 3009 + "name": { 3010 + "en": "Brust/Trizeps" 3011 + }, 3012 + "access": "PRIVATE", 3013 + "startDate": "2024-12-06T16:42:10.814Z", 3014 + "endDate": "2024-12-06T17:47:00.064Z", 3015 + "logType": "WORKOUT" 3016 + }, 3017 + { 3018 + "_links": { 3019 + "self": { 3020 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/logs/7879b074-96a9-4685-9dc8-9295940db188" 3021 + }, 3022 + "user": { 3023 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 3024 + }, 3025 + "template": { 3026 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/fdfbc66d-6d9c-4cdd-a871-fe916d6368cd" 3027 + } 3028 + }, 3029 + "_embedded": { 3030 + "cellSetGroup": [ 3031 + { 3032 + "_links": {}, 3033 + "_embedded": {}, 3034 + "id": "c7c01c65-18ec-41ab-90d2-dda46f23e131", 3035 + "cellSets": [ 3036 + { 3037 + "id": "ab544bf7-429c-4158-bef5-47e07baae81c", 3038 + "cells": [ 3039 + { 3040 + "id": "6672ae5a-1816-4e5b-ae92-f9b2e45205ca", 3041 + "cellType": "NOTE", 3042 + "value": "Just another note" 3043 + } 3044 + ] 3045 + } 3046 + ] 3047 + }, 3048 + { 3049 + "_links": { 3050 + "measurement": { 3051 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 3052 + } 3053 + }, 3054 + "_embedded": {}, 3055 + "id": "95e2213a-3011-486d-afa1-c0ede9925e5f", 3056 + "cellSets": [ 3057 + { 3058 + "id": "5d60e5c3-4b77-410d-b6b3-5cbb00b9539f", 3059 + "cells": [ 3060 + { 3061 + "id": "967c86cc-a672-446f-b722-2629295b8b81", 3062 + "cellType": "BARBELL_WEIGHT", 3063 + "value": "40" 3064 + }, 3065 + { 3066 + "id": "bc12fefb-3162-468d-99e0-dae783453a33", 3067 + "cellType": "REPS", 3068 + "value": "13" 3069 + } 3070 + ], 3071 + "isCompleted": true 3072 + }, 3073 + { 3074 + "id": "a2f282d8-9fb4-4b22-918f-6dd7361f94dd", 3075 + "cells": [ 3076 + { 3077 + "id": "58cea82d-6f10-4190-a2c9-a0694576d200", 3078 + "cellType": "BARBELL_WEIGHT", 3079 + "value": "40" 3080 + }, 3081 + { 3082 + "id": "050ab309-c2d7-4567-805d-86d281199b6f", 3083 + "cellType": "REPS", 3084 + "value": "10" 3085 + } 3086 + ], 3087 + "isCompleted": true 3088 + }, 3089 + { 3090 + "id": "8fc2ad23-7040-43c9-907c-c699309c5cff", 3091 + "cells": [ 3092 + { 3093 + "id": "a1c28638-ec92-4d73-84a8-1462cb88e6d2", 3094 + "cellType": "BARBELL_WEIGHT", 3095 + "value": "40" 3096 + }, 3097 + { 3098 + "id": "3abf3c9d-e804-443a-8051-49f5febfb388", 3099 + "cellType": "REPS", 3100 + "value": "7" 3101 + } 3102 + ], 3103 + "isCompleted": true 3104 + } 3105 + ] 3106 + }, 3107 + { 3108 + "_links": { 3109 + "measurement": { 3110 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6ae27da7-92b9-4af9-b2a9-e0afd827c188" 3111 + } 3112 + }, 3113 + "_embedded": {}, 3114 + "id": "682fe54e-cf92-4196-8f70-38c11f914d87", 3115 + "cellSets": [ 3116 + { 3117 + "id": "903b92b4-b848-4f6a-8a83-c678965cc121", 3118 + "cells": [ 3119 + { 3120 + "id": "c0d05362-9bad-4e10-b3b1-37cc61b1ea4a", 3121 + "cellType": "OTHER_WEIGHT", 3122 + "value": "45" 3123 + }, 3124 + { 3125 + "id": "d7626e88-4acc-4400-8072-fe83f256b99c", 3126 + "cellType": "REPS", 3127 + "value": "4" 3128 + } 3129 + ], 3130 + "isCompleted": true 3131 + }, 3132 + { 3133 + "id": "eabbb5a3-5461-4228-81cc-5acc1beb7489", 3134 + "cells": [ 3135 + { 3136 + "id": "7923c26a-8075-4ad4-b7ab-3946737f5b72", 3137 + "cellType": "OTHER_WEIGHT", 3138 + "value": "45" 3139 + }, 3140 + { 3141 + "id": "33dee2a0-56d3-49e0-8069-7011b888ef2d", 3142 + "cellType": "REPS", 3143 + "value": "12" 3144 + } 3145 + ], 3146 + "isCompleted": true 3147 + }, 3148 + { 3149 + "id": "45e2194f-8c6d-4e82-9863-112a90b1ddbd", 3150 + "cells": [ 3151 + { 3152 + "id": "712197c9-192a-47c0-8c2a-409f8844475d", 3153 + "cellType": "OTHER_WEIGHT", 3154 + "value": "45" 3155 + }, 3156 + { 3157 + "id": "3d4ac142-181a-4f48-98e9-1a458af88605", 3158 + "cellType": "REPS", 3159 + "value": "11" 3160 + } 3161 + ], 3162 + "isCompleted": true 3163 + } 3164 + ] 3165 + }, 3166 + { 3167 + "_links": { 3168 + "measurement": { 3169 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a60fd1af-31d7-4235-92cd-57f76d1c39e9" 3170 + } 3171 + }, 3172 + "_embedded": {}, 3173 + "id": "11eaeda1-1d73-4873-b731-6d96efdacbf4", 3174 + "cellSets": [ 3175 + { 3176 + "id": "3c551b9c-5982-4b8f-b490-3767bbd4e129", 3177 + "cells": [ 3178 + { 3179 + "id": "0446bfcc-517f-462b-93fe-371c5e5cee9d", 3180 + "cellType": "OTHER_WEIGHT", 3181 + "value": "35" 3182 + }, 3183 + { 3184 + "id": "62d23a5d-2396-4ca9-9a37-d196384bc39a", 3185 + "cellType": "REPS", 3186 + "value": "11" 3187 + } 3188 + ], 3189 + "isCompleted": true 3190 + }, 3191 + { 3192 + "id": "5e6e701b-b1ad-4c24-995b-70666835bad2", 3193 + "cells": [ 3194 + { 3195 + "id": "d1be40df-7b76-40d6-8fda-344ef48342bc", 3196 + "cellType": "OTHER_WEIGHT", 3197 + "value": "35" 3198 + }, 3199 + { 3200 + "id": "7166a12c-9402-4777-ac69-3d1db680875e", 3201 + "cellType": "REPS", 3202 + "value": "12" 3203 + } 3204 + ], 3205 + "isCompleted": true 3206 + }, 3207 + { 3208 + "id": "28f80d2e-e2c2-41eb-9494-f99a6898e8b4", 3209 + "cells": [ 3210 + { 3211 + "id": "d0f67027-1ccb-4536-8a29-fc3b50f10fdd", 3212 + "cellType": "OTHER_WEIGHT", 3213 + "value": "35" 3214 + }, 3215 + { 3216 + "id": "4a6e0f2d-10fe-44b5-ac62-987aea03f47c", 3217 + "cellType": "REPS", 3218 + "value": "9" 3219 + } 3220 + ], 3221 + "isCompleted": true 3222 + } 3223 + ] 3224 + }, 3225 + { 3226 + "_links": { 3227 + "measurement": { 3228 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/91efd24a-9acc-40dd-8f7f-16a1ab175f33" 3229 + } 3230 + }, 3231 + "_embedded": {}, 3232 + "id": "f94b29f3-60cb-4cba-ac45-3f6d68661466", 3233 + "cellSets": [ 3234 + { 3235 + "id": "7fbc4352-ee80-43e7-aaa8-ec463f879e50", 3236 + "cells": [ 3237 + { 3238 + "id": "dca0eb19-95ef-4ab4-9e9f-15111fe9f907", 3239 + "cellType": "BARBELL_WEIGHT", 3240 + "value": "40" 3241 + }, 3242 + { 3243 + "id": "24ff2fc2-be57-48e1-af91-9ed304e125db", 3244 + "cellType": "REPS", 3245 + "value": "16" 3246 + } 3247 + ], 3248 + "isCompleted": true 3249 + }, 3250 + { 3251 + "id": "c8a985c9-f107-49b9-bd3b-b490d157fd42", 3252 + "cells": [ 3253 + { 3254 + "id": "53229c4d-ec7f-48f2-9252-baa852b8d938", 3255 + "cellType": "BARBELL_WEIGHT", 3256 + "value": "40" 3257 + }, 3258 + { 3259 + "id": "45482d60-9f92-4719-8d79-b3a186f2a55e", 3260 + "cellType": "REPS", 3261 + "value": "14" 3262 + } 3263 + ], 3264 + "isCompleted": true 3265 + }, 3266 + { 3267 + "id": "cc7773b5-9830-4496-8db9-f63d336466e9", 3268 + "cells": [ 3269 + { 3270 + "id": "5bfa8d3c-4e21-4e29-ae89-ce5e5d0c4c25", 3271 + "cellType": "BARBELL_WEIGHT", 3272 + "value": "45" 3273 + }, 3274 + { 3275 + "id": "6822d48f-562b-4746-81dd-439fd5a5eacd", 3276 + "cellType": "REPS", 3277 + "value": "11" 3278 + } 3279 + ], 3280 + "isCompleted": true 3281 + } 3282 + ] 3283 + } 3284 + ] 3285 + }, 3286 + "timezoneId": "Europe/Berlin", 3287 + "id": "7879b074-96a9-4685-9dc8-9295940db188", 3288 + "created": "2024-12-11T17:19:58.997Z", 3289 + "lastChanged": "2024-12-11T17:19:58.997Z", 3290 + "name": { 3291 + "en": "Brust/Trizeps" 3292 + }, 3293 + "access": "PRIVATE", 3294 + "startDate": "2024-12-11T16:32:33.394Z", 3295 + "endDate": "2024-12-11T17:19:59.5Z", 3296 + "logType": "WORKOUT" 3297 + } 3298 + ], 3299 + "tag": [ 3300 + { 3301 + "_links": { 3302 + "self": { 3303 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/arms" 3304 + }, 3305 + "user": { 3306 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 3307 + }, 3308 + "measurement": [ 3309 + { 3310 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/79a42fc3-5363-48d7-9fba-8e643d50bbd4" 3311 + }, 3312 + { 3313 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/91efd24a-9acc-40dd-8f7f-16a1ab175f33" 3314 + }, 3315 + { 3316 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/0973c5dd-5b62-4e9e-a15e-114cb94f440d" 3317 + }, 3318 + { 3319 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3718fbd6-a0e5-4d56-bb92-10feb3600156" 3320 + }, 3321 + { 3322 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/d3560a25-828f-4f33-8624-6fc4875d3cca" 3323 + }, 3324 + { 3325 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/933a3dbf-b9c2-40f9-852f-cd2b26dd9eb1" 3326 + }, 3327 + { 3328 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/26c6975a-b7f5-4eec-8129-527a07a59d73" 3329 + }, 3330 + { 3331 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a45a5776-cbfc-4abf-9a05-f5c7d110c8ff" 3332 + }, 3333 + { 3334 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/de39b561-a90f-4212-95a3-84789c6f4813" 3335 + }, 3336 + { 3337 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b45be635-5eac-4d46-8071-607c1b1834cc" 3338 + }, 3339 + { 3340 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/70709ccd-1f01-4725-98ad-193d2004babf" 3341 + }, 3342 + { 3343 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/fbbd32d2-595a-4c4a-86de-05a06ef12908" 3344 + }, 3345 + { 3346 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b8b33683-ce46-4392-8be5-207fe8e605bd" 3347 + }, 3348 + { 3349 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a8eb5de6-5b77-4e81-adab-0835729506c7" 3350 + }, 3351 + { 3352 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/815c8007-0c79-4f8d-a2b8-873f7c03be9a" 3353 + }, 3354 + { 3355 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/f33643ea-6cc0-4966-8b1a-b87696015072" 3356 + }, 3357 + { 3358 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/237314ed-ead7-406c-92db-a20de0a9166f" 3359 + }, 3360 + { 3361 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8304df34-df61-423e-a9c9-f0cce6f16428" 3362 + }, 3363 + { 3364 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a953b453-9eb2-4c4e-bc55-9962770702f1" 3365 + }, 3366 + { 3367 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4a304d9a-9a7a-440f-bb9a-9fd5cde6b590" 3368 + }, 3369 + { 3370 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/16828b87-c3bb-4641-ab68-c0c0d38d6bea" 3371 + }, 3372 + { 3373 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ce7c6a7f-38f6-4783-93ff-cd3fb5e66260" 3374 + }, 3375 + { 3376 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2d2c4ccc-6755-4e13-a70b-feeb37f05505" 3377 + }, 3378 + { 3379 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/222b6cd5-87f3-42b7-9a0e-1ab4f4de59ee" 3380 + }, 3381 + { 3382 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/69a4be51-4b3b-4c89-8a54-7e83997f058c" 3383 + }, 3384 + { 3385 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/5819ecdc-a430-47fd-984d-9b221bb337ea" 3386 + }, 3387 + { 3388 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e5fa68c3-8f89-4fb8-a8b6-907c1feaceae" 3389 + }, 3390 + { 3391 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/607432af-4556-41ed-8746-a2e6c60e76a1" 3392 + }, 3393 + { 3394 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9df1b947-b05e-4250-84c4-b8dd55348ff6" 3395 + }, 3396 + { 3397 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e51ee0d8-bfa7-4bcf-b11d-86997a38c298" 3398 + }, 3399 + { 3400 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e6cb00c6-1460-4440-9c19-7fd6f4badf8d" 3401 + }, 3402 + { 3403 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4247db47-0f44-4314-851d-8ab4dce3317d" 3404 + } 3405 + ] 3406 + }, 3407 + "id": "arms", 3408 + "created": "2022-11-21T08:58:02.785Z", 3409 + "name": { 3410 + "en": "ARMS" 3411 + }, 3412 + "color": "#0075DC", 3413 + "isGlobal": true 3414 + }, 3415 + { 3416 + "_links": { 3417 + "self": { 3418 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/back" 3419 + }, 3420 + "user": { 3421 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 3422 + }, 3423 + "measurement": [ 3424 + { 3425 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/0cae2597-4a43-4d2f-9ec2-64b05dc35188" 3426 + }, 3427 + { 3428 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3e15b3fa-bd04-49ff-a622-633208a2d5df" 3429 + }, 3430 + { 3431 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ed06489a-f597-4cc1-81d0-eef7804f1fc5" 3432 + }, 3433 + { 3434 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/860bcb49-7f45-4212-9441-e9497e1220fc" 3435 + }, 3436 + { 3437 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/f12e2a9b-02ea-4d38-9127-aa6234786d3a" 3438 + }, 3439 + { 3440 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/fbd89dfb-0de7-4808-86d7-979d6f35126a" 3441 + }, 3442 + { 3443 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a8121bda-a232-4da2-be80-85bbe05c53d7" 3444 + }, 3445 + { 3446 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/534954cb-6720-45c4-bf63-a0766142ec6c" 3447 + }, 3448 + { 3449 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9a999f16-ca2a-47bf-a96c-b4977a6173ff" 3450 + }, 3451 + { 3452 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/65e1c38c-2013-40df-9d57-716a7f7f71e1" 3453 + }, 3454 + { 3455 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2f413df1-9169-4b49-bc97-be82ae29b0a5" 3456 + }, 3457 + { 3458 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6f66b6ce-846b-4f1c-b1ce-dd0fc0f542c2" 3459 + }, 3460 + { 3461 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/f31e19c8-1671-40e4-9089-e341fffe7751" 3462 + }, 3463 + { 3464 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/eff696f8-07e3-4745-aa31-a0def4c93ed1" 3465 + }, 3466 + { 3467 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/828ec5b3-fc2f-4f29-b372-607dde9c799a" 3468 + }, 3469 + { 3470 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/f267d09a-c60e-4b29-83d3-d50f00ce88da" 3471 + }, 3472 + { 3473 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2d20bcc4-2a19-4016-9583-f74cdccb1f16" 3474 + }, 3475 + { 3476 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b748103d-3014-4cae-a349-cec433528c3a" 3477 + }, 3478 + { 3479 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/aa185f9c-9341-4260-b007-593e9b74db10" 3480 + }, 3481 + { 3482 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/80057986-ebf3-4adb-8674-d48932b693c6" 3483 + }, 3484 + { 3485 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4bfc4dde-bd3d-4495-920d-eb646764e4de" 3486 + }, 3487 + { 3488 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8bf32b15-4ee9-49bc-87ae-57284e44b433" 3489 + }, 3490 + { 3491 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2ca2b6d5-f16d-4eac-89a2-05e1be0ceee7" 3492 + }, 3493 + { 3494 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b92aa3dd-98e1-4e99-a229-434be54c1ae5" 3495 + }, 3496 + { 3497 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/143f848f-3a01-40bd-88d1-613c3a88309e" 3498 + }, 3499 + { 3500 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/bed21e75-8a87-4711-847e-7e1b86a74436" 3501 + }, 3502 + { 3503 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/45a0a30b-ffb7-4722-a0cf-2889baa7ff9a" 3504 + }, 3505 + { 3506 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/bea508fb-4d1b-4320-8b34-20502785c6ec" 3507 + }, 3508 + { 3509 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/cffa1438-6d77-4a8d-8493-b8d7529d61ba" 3510 + }, 3511 + { 3512 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/faa4fd79-b28f-40d9-b528-023a0ae23b26" 3513 + }, 3514 + { 3515 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b8bd2e32-2133-4d66-866f-4b4239be2999" 3516 + }, 3517 + { 3518 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/f21ec917-6402-4938-8103-128fd49d13aa" 3519 + }, 3520 + { 3521 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/820ee004-4443-49d3-aeeb-50b0a53298dc" 3522 + }, 3523 + { 3524 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/adb75e5a-c873-4f57-bdf0-0043710ba90d" 3525 + }, 3526 + { 3527 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b1c68d18-cdc5-466a-96ea-c233473541dc" 3528 + }, 3529 + { 3530 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ac66c13f-2764-4a74-b4ad-01223fd0a9f5" 3531 + }, 3532 + { 3533 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/52141694-cabc-4776-91c5-503b3ef6d0ff" 3534 + }, 3535 + { 3536 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/c37a6d8d-d7d9-411b-a419-5066f341be00" 3537 + }, 3538 + { 3539 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/93d038a6-92fc-484d-a948-9fad070ff5b1" 3540 + } 3541 + ] 3542 + }, 3543 + "id": "back", 3544 + "created": "2022-11-21T08:58:02.785Z", 3545 + "name": { 3546 + "en": "BACK" 3547 + }, 3548 + "color": "#993F00", 3549 + "isGlobal": true 3550 + }, 3551 + { 3552 + "_links": { 3553 + "self": { 3554 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/cardio" 3555 + }, 3556 + "user": { 3557 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 3558 + }, 3559 + "measurement": [ 3560 + { 3561 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9a426b99-2830-4249-8314-bab46945fb77" 3562 + }, 3563 + { 3564 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2a19b409-da25-48de-8205-3fb89f7e95f2" 3565 + }, 3566 + { 3567 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4464e3b1-c412-4047-a5b9-8cdb7c8fe7b3" 3568 + }, 3569 + { 3570 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/fbcdaa3f-9dbd-4622-b7bc-6f45e1267feb" 3571 + }, 3572 + { 3573 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2c9ef821-6ea5-43a5-acbe-380477101d70" 3574 + }, 3575 + { 3576 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6f3480e3-5172-4499-9bba-a4516698d6b9" 3577 + }, 3578 + { 3579 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a35d3d7c-6093-47b9-b4dc-939c4d799169" 3580 + }, 3581 + { 3582 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/609a559a-a6a7-424b-8ac9-3d61d254e6d3" 3583 + }, 3584 + { 3585 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/f7c7a96b-7586-4e2b-b972-3e9e821d8f95" 3586 + }, 3587 + { 3588 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8ca4f443-ff3b-4501-97da-47c0792b2e40" 3589 + }, 3590 + { 3591 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/1a7d1360-cffb-4972-9e6b-70e7e5d3e6f0" 3592 + }, 3593 + { 3594 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9f09ef70-ea15-49a1-b6a2-0d197e95bf3b" 3595 + }, 3596 + { 3597 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/95aef7e7-e232-4442-851e-2231e7b54317" 3598 + }, 3599 + { 3600 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a8225200-79fb-4131-8ea2-c4df95f56c77" 3601 + }, 3602 + { 3603 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/05aa6d82-6388-4c3d-87a5-8d8edc1b3431" 3604 + }, 3605 + { 3606 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/0ea248ec-76d2-47b1-aba5-c35160a3236f" 3607 + }, 3608 + { 3609 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6de1b274-f023-49f2-94ec-add08373b7e4" 3610 + } 3611 + ] 3612 + }, 3613 + "id": "cardio", 3614 + "created": "2022-11-21T08:58:02.785Z", 3615 + "name": { 3616 + "en": "CARDIO" 3617 + }, 3618 + "color": "#94FFB5", 3619 + "isGlobal": true 3620 + }, 3621 + { 3622 + "_links": { 3623 + "self": { 3624 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/chest" 3625 + }, 3626 + "user": { 3627 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 3628 + }, 3629 + "measurement": [ 3630 + { 3631 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b17b3529-a04b-4860-84ea-16b6de4b65cc" 3632 + }, 3633 + { 3634 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/04e2090c-a84e-47a1-81c5-55103b28ed2f" 3635 + }, 3636 + { 3637 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/487e8b08-458f-43da-a9f6-e339c8d548a9" 3638 + }, 3639 + { 3640 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/247fe479-b90c-40a3-baf1-07f3c05ed014" 3641 + }, 3642 + { 3643 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b710665a-f88e-4d31-99bf-5ecb7b5f6500" 3644 + }, 3645 + { 3646 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3c226a8c-4399-4d98-a1fa-339e1672a163" 3647 + }, 3648 + { 3649 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6b6456e0-3725-4a0a-8306-1bd555f4e5b5" 3650 + }, 3651 + { 3652 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e6af1fc0-c961-4e74-a815-61f61e4fe42b" 3653 + }, 3654 + { 3655 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/7f6f4c96-4893-4f40-a7f4-2baf53cb3d04" 3656 + }, 3657 + { 3658 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/494b775e-663e-44ea-8cfb-6129de11236f" 3659 + }, 3660 + { 3661 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b820cd1b-1eff-46c5-80b6-12055f927082" 3662 + }, 3663 + { 3664 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6f7f2abf-43f9-414c-8fc9-cc02193c9669" 3665 + }, 3666 + { 3667 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4a8de470-a971-45db-830e-5f4b28db0894" 3668 + }, 3669 + { 3670 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/59bb3ebb-acab-426b-aedf-6149b8ef9100" 3671 + }, 3672 + { 3673 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b0c8a069-aae9-40d4-b842-a61a3c7cacde" 3674 + }, 3675 + { 3676 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9fd88d17-da0e-4abb-b5a6-77a934697877" 3677 + }, 3678 + { 3679 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6" 3680 + }, 3681 + { 3682 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/63d3c1b2-26b5-49bc-9ed9-3ea000e5768d" 3683 + }, 3684 + { 3685 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8ea57d93-b289-47ee-9f0b-ecd4d8eb4fa3" 3686 + }, 3687 + { 3688 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a60fd1af-31d7-4235-92cd-57f76d1c39e9" 3689 + }, 3690 + { 3691 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b444429e-86ba-4b58-9584-224c9148e0ab" 3692 + }, 3693 + { 3694 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/1a9537c6-f56a-4d4e-a491-c5c172cfa5ed" 3695 + }, 3696 + { 3697 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/980cb0df-4ef3-4af7-9333-48ee9f3943ce" 3698 + }, 3699 + { 3700 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6416d266-c84c-4aa6-a8b0-7582619c1bcb" 3701 + }, 3702 + { 3703 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6ae27da7-92b9-4af9-b2a9-e0afd827c188" 3704 + }, 3705 + { 3706 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/d74736d6-ac37-408f-adaf-9766f17ee9a9" 3707 + }, 3708 + { 3709 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/737d7664-5231-44f9-a112-a4c087f67675" 3710 + }, 3711 + { 3712 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/f0f86563-85fc-49a8-9ec7-f95ddd318ab4" 3713 + }, 3714 + { 3715 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/78e4a335-96b9-4492-a0f0-0ea26a6f69ca" 3716 + }, 3717 + { 3718 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/d340b2a7-9a2a-4130-b7bc-8903847ed565" 3719 + }, 3720 + { 3721 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b101465f-bec5-40cd-9434-0d832e5c655e" 3722 + } 3723 + ] 3724 + }, 3725 + "id": "chest", 3726 + "created": "2022-11-21T08:58:02.785Z", 3727 + "name": { 3728 + "en": "CHEST" 3729 + }, 3730 + "color": "#4C005C", 3731 + "isGlobal": true 3732 + }, 3733 + { 3734 + "_links": { 3735 + "self": { 3736 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/core" 3737 + }, 3738 + "user": { 3739 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 3740 + }, 3741 + "measurement": [ 3742 + { 3743 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/264a60b5-b014-4787-bb6b-9fb578cab911" 3744 + }, 3745 + { 3746 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/591439ee-94d1-4997-acb0-e5674e3b2f5c" 3747 + }, 3748 + { 3749 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/79f272a9-2d7f-4df0-ac75-d7d973f1df25" 3750 + }, 3751 + { 3752 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/1edc86ac-5c4a-46b4-a29b-04141141ff6b" 3753 + }, 3754 + { 3755 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e0b1aa09-f4c5-4ead-95de-03a2f7530c87" 3756 + }, 3757 + { 3758 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9ecccc7c-1846-4f58-8b63-fe4694915296" 3759 + }, 3760 + { 3761 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6df7b87b-4467-43b6-9458-6ade61838823" 3762 + }, 3763 + { 3764 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3ee4f524-773c-453b-bcb9-192f9c6a2efa" 3765 + }, 3766 + { 3767 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/42695e60-4dd7-41a0-8233-c26b1fe24e6e" 3768 + }, 3769 + { 3770 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/bb94b95b-ecb0-4b90-94e3-8f6e557f774b" 3771 + }, 3772 + { 3773 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/44fc5df2-520e-45d5-8810-c9e74b174e49" 3774 + }, 3775 + { 3776 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/c331ae12-b44a-426f-ac97-4c5169c0a74f" 3777 + }, 3778 + { 3779 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/1ea74f7f-6828-4a9e-8bbb-0c17523ec40a" 3780 + }, 3781 + { 3782 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4d2ae4fc-1cf8-4d12-b1f6-b1d607b9b8b4" 3783 + }, 3784 + { 3785 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/75c0cf08-e391-466c-83c5-565d1b278244" 3786 + }, 3787 + { 3788 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/accd839b-4059-451c-b310-1c8aa2739ace" 3789 + }, 3790 + { 3791 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3d2c4225-a113-4501-bf6b-abe7503dee9e" 3792 + }, 3793 + { 3794 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/61e7712d-f60f-47d3-921a-f02d5b72b808" 3795 + }, 3796 + { 3797 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3b8b97d5-57eb-427c-85b1-4e9222593a97" 3798 + }, 3799 + { 3800 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/39c9395b-da2d-40d6-b18c-2a3ab22e3a50" 3801 + }, 3802 + { 3803 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/784d5217-cc1a-4267-bb18-4bf611903c49" 3804 + }, 3805 + { 3806 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/7837fcaf-0843-491c-bd3b-cf579cfa06b0" 3807 + }, 3808 + { 3809 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/f56c1c33-30be-4259-8ace-7ffc1bfea1d7" 3810 + }, 3811 + { 3812 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/910e476e-c32d-44a8-b0a5-68ee05d72011" 3813 + }, 3814 + { 3815 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/943cb841-6157-4021-b842-612bd9f8b4e0" 3816 + }, 3817 + { 3818 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9d6c15df-f4a9-4e18-92b3-259a8f43a356" 3819 + }, 3820 + { 3821 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8eba64e0-5e50-4f85-ad66-7faeb87e5bb0" 3822 + }, 3823 + { 3824 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b17772de-f3ec-471b-8485-08ecffe4a595" 3825 + }, 3826 + { 3827 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2dc47f38-396c-492a-94e2-f4aa9d012308" 3828 + }, 3829 + { 3830 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6102ebdd-f375-4cdb-8f3e-b50fbe0086ef" 3831 + }, 3832 + { 3833 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/37388e32-6714-4e27-8dcf-50d4b6ce6292" 3834 + } 3835 + ] 3836 + }, 3837 + "id": "core", 3838 + "created": "2022-11-21T08:58:02.785Z", 3839 + "name": { 3840 + "en": "CORE" 3841 + }, 3842 + "color": "#F0A3FF", 3843 + "isGlobal": true 3844 + }, 3845 + { 3846 + "_links": { 3847 + "self": { 3848 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/full-body" 3849 + }, 3850 + "user": { 3851 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 3852 + }, 3853 + "measurement": [ 3854 + { 3855 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b49268bb-058e-4139-ac4a-555d1d5ae9fb" 3856 + }, 3857 + { 3858 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9bf68e10-b954-4d3d-af8b-c3ca21587a70" 3859 + }, 3860 + { 3861 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/0373b862-bde8-4335-ab03-763cca57455c" 3862 + }, 3863 + { 3864 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/d32f8c6a-e498-4fc0-b18d-5ce16680a63c" 3865 + }, 3866 + { 3867 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/402c550a-194e-4b58-a2ec-b12e5b404547" 3868 + }, 3869 + { 3870 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/55afec19-d074-4083-a554-085f533b62ce" 3871 + }, 3872 + { 3873 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e676f31d-5fa2-4a61-bed6-af0ff6c17c77" 3874 + }, 3875 + { 3876 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/71bfded1-f19a-418e-8f97-0e23b2e63535" 3877 + }, 3878 + { 3879 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/74a43a3f-5e0b-43c8-953e-f7e9c7d72986" 3880 + }, 3881 + { 3882 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/886d4155-ee4e-40ee-9da6-bda3dd44824d" 3883 + } 3884 + ] 3885 + }, 3886 + "id": "full-body", 3887 + "created": "2022-11-21T08:58:02.785Z", 3888 + "name": { 3889 + "en": "FULL BODY" 3890 + }, 3891 + "color": "#808080", 3892 + "isGlobal": true 3893 + }, 3894 + { 3895 + "_links": { 3896 + "self": { 3897 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/legs" 3898 + }, 3899 + "user": { 3900 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 3901 + }, 3902 + "measurement": [ 3903 + { 3904 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a61773eb-580a-448f-9b03-90aeb3c7c83d" 3905 + }, 3906 + { 3907 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/00980376-619e-4898-b27c-1dde6faa0daa" 3908 + }, 3909 + { 3910 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/894a9de0-b8f3-4f7f-8102-6bf9cc8c5c6e" 3911 + }, 3912 + { 3913 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/bf2b8a82-3e96-47ca-a106-796e23193444" 3914 + }, 3915 + { 3916 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/c0748e6e-3a6a-4217-8912-0c2cc92ec704" 3917 + }, 3918 + { 3919 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/21ddb847-98cd-4f6c-bea5-1df51163973d" 3920 + }, 3921 + { 3922 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/819a0ba2-0a52-41f9-81dc-8f00c1f5a55d" 3923 + }, 3924 + { 3925 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/231a78da-13dc-441d-ac31-03d5730e8168" 3926 + }, 3927 + { 3928 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/99afdf73-0e2f-4f2d-a10d-90299196b0db" 3929 + }, 3930 + { 3931 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/c8fc2454-6b09-4e28-a762-397cca489fd2" 3932 + }, 3933 + { 3934 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b2f5a8c1-b66a-4b4f-8f2a-72fbf578d943" 3935 + }, 3936 + { 3937 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/88b0165c-0c7c-423a-949d-0171baa354c2" 3938 + }, 3939 + { 3940 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/57f573f8-f797-4483-bc1f-5911a70463a6" 3941 + }, 3942 + { 3943 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/14263e88-13d4-4582-9b18-423a36631645" 3944 + }, 3945 + { 3946 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2abae8f2-b1cc-497c-af76-1c8e88ae3bf6" 3947 + }, 3948 + { 3949 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4a52954f-4354-4da6-81be-fff191f29f91" 3950 + }, 3951 + { 3952 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/045d89bc-900c-444f-b72a-3852a05ef78f" 3953 + }, 3954 + { 3955 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ad292205-db0e-4ced-9cef-f82b8aa243d5" 3956 + }, 3957 + { 3958 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/bad7dcc2-fac7-4ec8-8c03-1ec6bb471069" 3959 + }, 3960 + { 3961 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/312f0076-00f8-47a4-9365-38c80b99cb91" 3962 + }, 3963 + { 3964 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8b2c7487-28e7-48c3-8d07-1ad83cc7133c" 3965 + }, 3966 + { 3967 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b1827979-7d0e-4d6f-8498-c0b3fb1fe187" 3968 + }, 3969 + { 3970 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/0f71ee4c-5dad-4617-8e8d-e8e133afc2c1" 3971 + }, 3972 + { 3973 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/acaf0999-7976-48f6-a5fc-80c0d6d7bb67" 3974 + }, 3975 + { 3976 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/d53099b7-31f3-41fa-99e2-72fdf47c4503" 3977 + }, 3978 + { 3979 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4b8c9374-ab32-4912-906a-202ef1b20ea6" 3980 + }, 3981 + { 3982 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/d1f2e4d1-2529-4d33-bfd1-3c22b7d99dbd" 3983 + }, 3984 + { 3985 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3395ead5-bd9b-4d02-be71-dc2b1ee5f16d" 3986 + }, 3987 + { 3988 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/fe4e5949-5f51-4c60-a31f-b45bd9ad8023" 3989 + }, 3990 + { 3991 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/6edf0381-ebaf-4163-9f0f-f6099f9e29ff" 3992 + }, 3993 + { 3994 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9000fcaf-155a-410e-b774-ee1dce73b62d" 3995 + }, 3996 + { 3997 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b2f5a2de-c684-4e94-a6e5-581e0695fcac" 3998 + }, 3999 + { 4000 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8ef3f10f-0e9a-4302-bf8f-ae98c0152933" 4001 + }, 4002 + { 4003 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ae9f2bee-8c45-4257-b7f2-da345cbf950c" 4004 + }, 4005 + { 4006 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/7d1df88e-8610-495b-83a3-d68aabbfee8a" 4007 + }, 4008 + { 4009 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/9ee6c51e-6b22-46ee-abb6-e716cb94ad42" 4010 + }, 4011 + { 4012 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/d29b9cde-54e4-41df-b3ef-2e7e9bb05806" 4013 + }, 4014 + { 4015 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/29b69647-23ec-4da7-9299-89b8eb1fbf68" 4016 + }, 4017 + { 4018 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/1263f3d4-4ab0-4b59-a65a-626516ca87ab" 4019 + }, 4020 + { 4021 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/c9ef4e7a-2bec-41b1-8e62-b68dc6d81fb2" 4022 + }, 4023 + { 4024 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/84a59482-5faf-451d-b5a9-6e98e868f006" 4025 + }, 4026 + { 4027 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/c6123164-6caa-46f2-aa22-c02b9b52815d" 4028 + }, 4029 + { 4030 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/70192f8e-971a-4c67-ab93-ed05932b24e6" 4031 + }, 4032 + { 4033 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/eadcbaab-af0c-4f83-9e1b-c0ad5f03a0a0" 4034 + }, 4035 + { 4036 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/213bd3ef-1207-4fd8-acdd-cb224a8b42a7" 4037 + }, 4038 + { 4039 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3e1394a8-dba1-45d0-bc5c-d6100f8f8154" 4040 + }, 4041 + { 4042 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/752349b3-8813-48d2-b315-6ef4d9b4f3cb" 4043 + }, 4044 + { 4045 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/94bd6a11-1ef7-4d52-a373-00200a7a21cb" 4046 + }, 4047 + { 4048 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/0891014c-f2f0-4883-acdd-6dead68ced8e" 4049 + }, 4050 + { 4051 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/f6e4ceab-9cd9-43ec-8f16-650f8caba2b4" 4052 + }, 4053 + { 4054 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a467f043-c96e-43c8-9133-a33eb8e62ded" 4055 + }, 4056 + { 4057 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2de0ec86-52dd-4b20-bae1-375c412adfa6" 4058 + }, 4059 + { 4060 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b76cb4ce-53c9-42f8-b520-6f663ee8546b" 4061 + }, 4062 + { 4063 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2c0cfe0e-df0b-4e85-946c-8acef3ffa7e5" 4064 + } 4065 + ] 4066 + }, 4067 + "id": "legs", 4068 + "created": "2022-11-21T08:58:02.785Z", 4069 + "name": { 4070 + "en": "LEGS" 4071 + }, 4072 + "color": "#191919", 4073 + "isGlobal": true 4074 + }, 4075 + { 4076 + "_links": { 4077 + "self": { 4078 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/olympic" 4079 + }, 4080 + "user": { 4081 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4082 + }, 4083 + "measurement": [ 4084 + { 4085 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/fc0eaffb-e4d3-433e-8c19-7be1fdb0b0dc" 4086 + }, 4087 + { 4088 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/bb8099c1-43ad-4fb7-bf0e-a736a4f7b58c" 4089 + }, 4090 + { 4091 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/c52fe00e-8ae8-4ea6-a287-4903f5c500ce" 4092 + }, 4093 + { 4094 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/33474127-a045-46b7-b70d-4165cac41463" 4095 + }, 4096 + { 4097 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e4c5920a-0b6b-485c-9b38-9ec25eaae77b" 4098 + }, 4099 + { 4100 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e6336f12-c2ff-4a76-b64e-3a1bc0d0a528" 4101 + }, 4102 + { 4103 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a5fbd395-09b3-473e-95a2-7275750666ad" 4104 + }, 4105 + { 4106 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e4bd5013-4679-4091-8695-310a67b2e2df" 4107 + }, 4108 + { 4109 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/83d40255-ea20-41de-9e13-d4893c100707" 4110 + }, 4111 + { 4112 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/832eac71-da90-4faa-9031-8875081479d3" 4113 + }, 4114 + { 4115 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/04ac1091-7b4c-44fb-9d00-b04fe3c5b1a1" 4116 + }, 4117 + { 4118 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/e7b25cc7-693d-4ede-991f-62d32d3d69e9" 4119 + }, 4120 + { 4121 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/c40d8757-5c97-4543-bc13-5cb87c315bc2" 4122 + } 4123 + ] 4124 + }, 4125 + "id": "olympic", 4126 + "created": "2022-11-21T08:58:02.785Z", 4127 + "name": { 4128 + "en": "OLYMPIC" 4129 + }, 4130 + "color": "#FFCC99", 4131 + "isGlobal": true 4132 + }, 4133 + { 4134 + "_links": { 4135 + "self": { 4136 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/other" 4137 + }, 4138 + "user": { 4139 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4140 + }, 4141 + "measurement": [ 4142 + { 4143 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a4689d35-a845-4ad0-aa79-84005b8b9d27" 4144 + } 4145 + ] 4146 + }, 4147 + "id": "other", 4148 + "created": "2022-11-21T08:58:02.785Z", 4149 + "name": { 4150 + "en": "OTHER" 4151 + }, 4152 + "color": "#2BCE48", 4153 + "isGlobal": true 4154 + }, 4155 + { 4156 + "_links": { 4157 + "self": { 4158 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/tags/shoulders" 4159 + }, 4160 + "user": { 4161 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4162 + }, 4163 + "measurement": [ 4164 + { 4165 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a1b1a1cb-dacc-4d18-bf62-95d597db6715" 4166 + }, 4167 + { 4168 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/45fbc14c-584e-473f-81f3-14ad422906be" 4169 + }, 4170 + { 4171 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/d3f21789-0e0c-4c2a-a633-3617f383a11d" 4172 + }, 4173 + { 4174 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8dc8a29b-674b-43c9-bf6e-46b95f3414be" 4175 + }, 4176 + { 4177 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/edd6d6dd-2605-414a-bf0d-5ac3e41b8c06" 4178 + }, 4179 + { 4180 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/56f23487-1b65-4d4e-bcba-9d7a424110ef" 4181 + }, 4182 + { 4183 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/61f41123-654e-45b9-9c3b-fd4cbea9eaf0" 4184 + }, 4185 + { 4186 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/caa35db9-e106-4915-840c-e7205f6e7228" 4187 + }, 4188 + { 4189 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/5db8f3d7-445e-48bb-bf4b-979b6dfdb1eb" 4190 + }, 4191 + { 4192 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/560e513c-9b0f-4375-a02d-464bd35fa054" 4193 + }, 4194 + { 4195 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/091ba495-1623-4578-95f0-5bd1aeebf3e9" 4196 + }, 4197 + { 4198 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3a438aef-3262-4b10-af0b-07a17c6694a7" 4199 + }, 4200 + { 4201 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ec4d5ff5-bd4d-4b33-b785-7db1c36054f8" 4202 + }, 4203 + { 4204 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/700ac5e1-6303-4c5d-921e-1007cd0998e5" 4205 + }, 4206 + { 4207 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/4d563338-f2ed-430d-ae12-ec45482edf20" 4208 + }, 4209 + { 4210 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3916b75a-9ebd-4e7f-a781-097f49efb2cc" 4211 + }, 4212 + { 4213 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/5974b925-ff0f-40de-9385-e6ccac763ddd" 4214 + }, 4215 + { 4216 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/b292faa1-44cf-4aa3-9670-43200c2d1832" 4217 + }, 4218 + { 4219 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/0abcf1b6-58f6-4ec9-be63-32bd5c3cfd33" 4220 + }, 4221 + { 4222 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ae345023-155f-4c14-b6e9-fcafc87619e3" 4223 + }, 4224 + { 4225 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/ba31414c-4bd8-441b-9e1a-56a68220831b" 4226 + }, 4227 + { 4228 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/3c24e378-0ae0-4b62-bfd5-bed2e8bffdfa" 4229 + }, 4230 + { 4231 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/8951200e-5791-4885-bee1-cacac5d08c77" 4232 + }, 4233 + { 4234 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/594e8ce0-a34a-4349-8dc0-7ac45950b8c8" 4235 + }, 4236 + { 4237 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/cbacf25c-6c34-42ec-bcfd-d1941d757dc1" 4238 + }, 4239 + { 4240 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/a3f1d57d-da0e-466d-a691-c03695d39418" 4241 + }, 4242 + { 4243 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/measurements/2506457c-207c-4a15-86b4-281257cb2c4d" 4244 + } 4245 + ] 4246 + }, 4247 + "id": "shoulders", 4248 + "created": "2022-11-21T08:58:02.785Z", 4249 + "name": { 4250 + "en": "SHOULDERS" 4251 + }, 4252 + "color": "#005C31", 4253 + "isGlobal": true 4254 + } 4255 + ], 4256 + "folder": [ 4257 + { 4258 + "_links": { 4259 + "self": { 4260 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/folders/example-templates" 4261 + }, 4262 + "user": { 4263 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4264 + }, 4265 + "template": [ 4266 + { 4267 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/c01d6229-bcf4-484a-a28b-19872ce7838c" 4268 + }, 4269 + { 4270 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/8f931692-9d13-4d70-96bb-5aebfe4c05ca" 4271 + }, 4272 + { 4273 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/038dd384-57b0-4b42-bc10-125baf41a565" 4274 + }, 4275 + { 4276 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/c6e357f5-f8ee-4c3c-8eeb-80c1b3eba5a3" 4277 + }, 4278 + { 4279 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/7aab118e-7358-42fe-a926-4b64c2fbb5e5" 4280 + }, 4281 + { 4282 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/4af63d92-425f-4ed2-ae12-aa1d9a758881" 4283 + }, 4284 + { 4285 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/840aecee-767a-41a7-9a11-c581066c34b6" 4286 + }, 4287 + { 4288 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/dd0a1356-7f3b-45b2-a2ef-1dd6fc0b245a" 4289 + } 4290 + ] 4291 + }, 4292 + "id": "example-templates", 4293 + "isGlobal": true, 4294 + "created": "2022-11-21T08:58:14.807Z", 4295 + "lastChanged": "2022-11-21T08:58:14.807Z", 4296 + "name": { 4297 + "en": "Example Templates" 4298 + }, 4299 + "index": -1 4300 + }, 4301 + { 4302 + "_links": { 4303 + "self": { 4304 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/folders/0f518518-5180-4518-b518-51b51851b518-my-templates" 4305 + }, 4306 + "user": { 4307 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4308 + }, 4309 + "template": [ 4310 + { 4311 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/619f8fb0-dad7-4cef-9d59-c495ef08e291" 4312 + }, 4313 + { 4314 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/cd4f349c-2aa7-45cc-a661-dfd96c6d91cd" 4315 + }, 4316 + { 4317 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/eea78494-1c81-427a-be66-ef041b0b3c00" 4318 + }, 4319 + { 4320 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/e42c2e80-c142-4682-85a7-013a3e4fcbbf" 4321 + }, 4322 + { 4323 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/templates/71214f05-8e1e-4222-9766-efb0aea40119" 4324 + } 4325 + ] 4326 + }, 4327 + "id": "0f518518-5180-4518-b518-51b51851b518-my-templates", 4328 + "created": "2024-12-21T15:53:30.13Z", 4329 + "lastChanged": "2025-08-21T16:19:04.052Z", 4330 + "name": { 4331 + "en": "My Templates" 4332 + }, 4333 + "index": 0 4334 + } 4335 + ], 4336 + "widget": [ 4337 + { 4338 + "_links": { 4339 + "self": { 4340 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/widgets/5f563b3d-7d2a-44db-a302-04137bb437bb" 4341 + }, 4342 + "user": { 4343 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4344 + } 4345 + }, 4346 + "id": "5f563b3d-7d2a-44db-a302-04137bb437bb", 4347 + "created": "2024-10-20T21:58:48.656Z", 4348 + "lastChanged": "2024-10-20T21:58:48.656Z", 4349 + "index": 0, 4350 + "widgetType": "WORKOUTS_PER_WEEK", 4351 + "parameters": {} 4352 + }, 4353 + { 4354 + "_links": { 4355 + "self": { 4356 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/widgets/cf8158c1-c7c7-4457-aeb7-a472adfd20fa" 4357 + }, 4358 + "user": { 4359 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4360 + } 4361 + }, 4362 + "id": "cf8158c1-c7c7-4457-aeb7-a472adfd20fa", 4363 + "created": "2024-12-24T23:19:55.288Z", 4364 + "lastChanged": "2024-12-24T23:20:01.535Z", 4365 + "isHidden": true 4366 + }, 4367 + { 4368 + "_links": { 4369 + "self": { 4370 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/widgets/8ea9e4d9-1d1b-4bc1-9df1-0f77a06c7be7" 4371 + }, 4372 + "user": { 4373 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4374 + } 4375 + }, 4376 + "id": "8ea9e4d9-1d1b-4bc1-9df1-0f77a06c7be7", 4377 + "created": "2025-02-02T15:39:04.179Z", 4378 + "lastChanged": "2025-02-02T15:39:19.428Z", 4379 + "isHidden": true 4380 + }, 4381 + { 4382 + "_links": { 4383 + "self": { 4384 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/widgets/a55c25c2-eb44-4901-a9ea-0cc44dcfcda6" 4385 + }, 4386 + "user": { 4387 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4388 + } 4389 + }, 4390 + "id": "a55c25c2-eb44-4901-a9ea-0cc44dcfcda6", 4391 + "created": "2025-02-02T15:39:50.979Z", 4392 + "lastChanged": "2025-02-16T20:23:28.723Z", 4393 + "isHidden": true 4394 + }, 4395 + { 4396 + "_links": { 4397 + "self": { 4398 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518/widgets/1c524a5b-3915-4e56-8e5e-662381c6967d" 4399 + }, 4400 + "user": { 4401 + "href": "/api/users/0f518518-5180-4518-b518-51b51851b518" 4402 + } 4403 + }, 4404 + "id": "1c524a5b-3915-4e56-8e5e-662381c6967d", 4405 + "created": "2025-02-02T15:39:29.253Z", 4406 + "lastChanged": "2025-02-16T20:23:32.049Z", 4407 + "isHidden": true 4408 + } 4409 + ] 4410 + }, 4411 + "id": "0f518518-5180-4518-b518-51b51851b518", 4412 + "created": "2024-10-20T21:58:21.527Z", 4413 + "lastChanged": "2026-01-23T10:09:19.407Z", 4414 + "username": "my-username", 4415 + "email": "spam@returnnull.de", 4416 + "emailVerified": true, 4417 + "name": "Tolik V.", 4418 + "avatar": { 4419 + "url": "https://files.strong.app/users/0f518518-5180-4518-b518-51b51851b518/74f8855c-52c9-466b-8229-46021d7553ae.jpg", 4420 + "contentType": "image/jpeg" 4421 + }, 4422 + "preferences": { 4423 + "weightUnit": { 4424 + "0f518518-5180-4518-b518-51b51851b518": "KILOGRAMS" 4425 + }, 4426 + "distanceUnit": { 4427 + "0f518518-5180-4518-b518-51b51851b518": "KILOMETERS" 4428 + }, 4429 + "restTimer": { 4430 + "0f518518-5180-4518-b518-51b51851b518": 120, 4431 + "ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6": 120 4432 + }, 4433 + "warmupRestTimer": { 4434 + "ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6": 0 4435 + }, 4436 + "supersetRestTimer": {}, 4437 + "dropSetRestTimer": { 4438 + "0f518518-5180-4518-b518-51b51851b518": 10, 4439 + "ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6": 0 4440 + }, 4441 + "baseWeight": {}, 4442 + "barType": { 4443 + "8951200e-5791-4885-bee1-cacac5d08c77": "NONE", 4444 + "e676f31d-5fa2-4a61-bed6-af0ff6c17c77": "NONE", 4445 + "c8fc2454-6b09-4e28-a762-397cca489fd2": "NONE", 4446 + "55afec19-d074-4083-a554-085f533b62ce": "NONE", 4447 + "a61773eb-580a-448f-9b03-90aeb3c7c83d": "NONE", 4448 + "4a304d9a-9a7a-440f-bb9a-9fd5cde6b590": "NONE", 4449 + "fbd89dfb-0de7-4808-86d7-979d6f35126a": "NONE", 4450 + "75c0cf08-e391-466c-83c5-565d1b278244": "NONE", 4451 + "bb94b95b-ecb0-4b90-94e3-8f6e557f774b": "NONE", 4452 + "a8eb5de6-5b77-4e81-adab-0835729506c7": "NONE", 4453 + "a60fd1af-31d7-4235-92cd-57f76d1c39e9": "NONE", 4454 + "b92aa3dd-98e1-4e99-a229-434be54c1ae5": "NONE", 4455 + "4a8de470-a971-45db-830e-5f4b28db0894": "NONE", 4456 + "143f848f-3a01-40bd-88d1-613c3a88309e": "NONE", 4457 + "0abcf1b6-58f6-4ec9-be63-32bd5c3cfd33": "NONE", 4458 + "231a78da-13dc-441d-ac31-03d5730e8168": "NONE", 4459 + "b8b33683-ce46-4392-8be5-207fe8e605bd": "NONE", 4460 + "d3f21789-0e0c-4c2a-a633-3617f383a11d": "NONE", 4461 + "b0c8a069-aae9-40d4-b842-a61a3c7cacde": "NONE", 4462 + "312f0076-00f8-47a4-9365-38c80b99cb91": "NONE", 4463 + "70709ccd-1f01-4725-98ad-193d2004babf": "NONE", 4464 + "93d038a6-92fc-484d-a948-9fad070ff5b1": "NONE", 4465 + "88b0165c-0c7c-423a-949d-0171baa354c2": "NONE", 4466 + "8dc8a29b-674b-43c9-bf6e-46b95f3414be": "NONE", 4467 + "99afdf73-0e2f-4f2d-a10d-90299196b0db": "NONE", 4468 + "7d1df88e-8610-495b-83a3-d68aabbfee8a": "NONE", 4469 + "3718fbd6-a0e5-4d56-bb92-10feb3600156": "NONE", 4470 + "933a3dbf-b9c2-40f9-852f-cd2b26dd9eb1": "NONE", 4471 + "aa185f9c-9341-4260-b007-593e9b74db10": "NONE", 4472 + "fe4e5949-5f51-4c60-a31f-b45bd9ad8023": "NONE", 4473 + "f12e2a9b-02ea-4d38-9127-aa6234786d3a": "NONE", 4474 + "b2f5a8c1-b66a-4b4f-8f2a-72fbf578d943": "NONE", 4475 + "04e2090c-a84e-47a1-81c5-55103b28ed2f": "NONE", 4476 + "213bd3ef-1207-4fd8-acdd-cb224a8b42a7": "NONE", 4477 + "a467f043-c96e-43c8-9133-a33eb8e62ded": "NONE", 4478 + "980cb0df-4ef3-4af7-9333-48ee9f3943ce": "NONE", 4479 + "6ae27da7-92b9-4af9-b2a9-e0afd827c188": "NONE", 4480 + "b101465f-bec5-40cd-9434-0d832e5c655e": "NONE", 4481 + "b292faa1-44cf-4aa3-9670-43200c2d1832": "NONE", 4482 + "1edc86ac-5c4a-46b4-a29b-04141141ff6b": "NONE", 4483 + "819a0ba2-0a52-41f9-81dc-8f00c1f5a55d": "NONE", 4484 + "f33643ea-6cc0-4966-8b1a-b87696015072": "NONE", 4485 + "14263e88-13d4-4582-9b18-423a36631645": "NONE", 4486 + "9000fcaf-155a-410e-b774-ee1dce73b62d": "NONE", 4487 + "45fbc14c-584e-473f-81f3-14ad422906be": "NONE", 4488 + "79a42fc3-5363-48d7-9fba-8e643d50bbd4": "NONE", 4489 + "0373b862-bde8-4335-ab03-763cca57455c": "NONE", 4490 + "a8121bda-a232-4da2-be80-85bbe05c53d7": "NONE", 4491 + "59bb3ebb-acab-426b-aedf-6149b8ef9100": "NONE", 4492 + "caa35db9-e106-4915-840c-e7205f6e7228": "NONE", 4493 + "42695e60-4dd7-41a0-8233-c26b1fe24e6e": "NONE", 4494 + "d53099b7-31f3-41fa-99e2-72fdf47c4503": "NONE", 4495 + "247fe479-b90c-40a3-baf1-07f3c05ed014": "NONE", 4496 + "6102ebdd-f375-4cdb-8f3e-b50fbe0086ef": "NONE", 4497 + "e6cb00c6-1460-4440-9c19-7fd6f4badf8d": "NONE", 4498 + "b710665a-f88e-4d31-99bf-5ecb7b5f6500": "NONE", 4499 + "65e1c38c-2013-40df-9d57-716a7f7f71e1": "NONE", 4500 + "0973c5dd-5b62-4e9e-a15e-114cb94f440d": "NONE", 4501 + "f31e19c8-1671-40e4-9089-e341fffe7751": "NONE", 4502 + "b45be635-5eac-4d46-8071-607c1b1834cc": "NONE", 4503 + "21ddb847-98cd-4f6c-bea5-1df51163973d": "NONE", 4504 + "c9ef4e7a-2bec-41b1-8e62-b68dc6d81fb2": "NONE", 4505 + "487e8b08-458f-43da-a9f6-e339c8d548a9": "NONE", 4506 + "091ba495-1623-4578-95f0-5bd1aeebf3e9": "NONE", 4507 + "bad7dcc2-fac7-4ec8-8c03-1ec6bb471069": "NONE", 4508 + "4b8c9374-ab32-4912-906a-202ef1b20ea6": "NONE", 4509 + "f21ec917-6402-4938-8103-128fd49d13aa": "NONE", 4510 + "7f6f4c96-4893-4f40-a7f4-2baf53cb3d04": "NONE", 4511 + "b1c68d18-cdc5-466a-96ea-c233473541dc": "NONE", 4512 + "534954cb-6720-45c4-bf63-a0766142ec6c": "NONE", 4513 + "56f23487-1b65-4d4e-bcba-9d7a424110ef": "NONE", 4514 + "a3f1d57d-da0e-466d-a691-c03695d39418": "NONE", 4515 + "a1b1a1cb-dacc-4d18-bf62-95d597db6715": "NONE", 4516 + "74a43a3f-5e0b-43c8-953e-f7e9c7d72986": "NONE", 4517 + "3e15b3fa-bd04-49ff-a622-633208a2d5df": "NONE", 4518 + "ca9ee259-a69f-4839-bbf9-46ba8cf0d7d6": "OLYMPIC_BAR" 4519 + }, 4520 + "autoStartRestTimer": {}, 4521 + "availablePlates": { 4522 + "0f518518-5180-4518-b518-51b51851b518": [ 4523 + "PLATE_20KG", 4524 + "PLATE_10KG", 4525 + "PLATE_5KG", 4526 + "PLATE_2_5KG", 4527 + "PLATE_1_25KG" 4528 + ] 4529 + }, 4530 + "lengthUnit": { 4531 + "0f518518-5180-4518-b518-51b51851b518": "CENTIMETERS" 4532 + }, 4533 + "resistanceWeightUnit": { 4534 + "0f518518-5180-4518-b518-51b51851b518": "KILOGRAMS" 4535 + }, 4536 + "restTimerIncrementValue": { 4537 + "0f518518-5180-4518-b518-51b51851b518": 5 4538 + } 4539 + }, 4540 + "purchases": [ 4541 + { 4542 + "purchaseId": "legacy", 4543 + "expiryTime": "2069-04-20T13:37:00.002Z", 4544 + "autoRenewing": false, 4545 + "sku": "legacy", 4546 + "source": "LEGACY", 4547 + "paymentState": "UNDEFINED" 4548 + } 4549 + ], 4550 + "legacyPurchase": { 4551 + "upgrades": [], 4552 + "proExpirationDate": "2069-04-20T13:37:00.002Z" 4553 + }, 4554 + "legacyGoals": { 4555 + "workoutsPerWeek": 3 4556 + }, 4557 + "legacyCustomBarTypes": [ 4558 + { 4559 + "legacyCustomBarTypeId": "c911c5bf-8747-49bb-bb04-a32fec541ccf", 4560 + "name": "SZ-Stange", 4561 + "weightInKilograms": 10.0, 4562 + "weightInPounds": 22.05 4563 + } 4564 + ], 4565 + "startHistoryFromDate": "1970-01-01T00:00:00Z", 4566 + "firstWeekDay": "MONDAY", 4567 + "availableLogins": [ 4568 + { 4569 + "provider": "Password", 4570 + "name": "Tolik", 4571 + "email": "spam@returnnull.de" 4572 + }, 4573 + { 4574 + "provider": "Google", 4575 + "name": "Tolik", 4576 + "email": "spam@returnnull.de" 4577 + } 4578 + ], 4579 + "migrated": "2024-12-21T15:53:30.376Z" 4580 + }
+111
strong-api-lib/tests/measurement_tests.rs
··· 1 + use strong_api_lib::models::common::Name; 2 + use strong_api_lib::models::measurement::MeasurementsResponse; 3 + 4 + fn load_fixture(name: &str) -> String { 5 + std::fs::read_to_string(format!( 6 + "{}/tests/fixtures/{}", 7 + env!("CARGO_MANIFEST_DIR"), 8 + name 9 + )) 10 + .unwrap_or_else(|_| panic!("fixture '{name}' not found")) 11 + } 12 + 13 + fn response_from_fixture() -> MeasurementsResponse { 14 + let json = load_fixture("measurements_response.json"); 15 + serde_json::from_str(&json).unwrap() 16 + } 17 + 18 + // --------------------------------------------------------------------------- 19 + // Name — Display and From impls (models/common.rs) 20 + // These are the only non-trivial logic in common.rs; each branch needs a test. 21 + // --------------------------------------------------------------------------- 22 + 23 + #[test] 24 + fn test_name_display_en() { 25 + let name = Name { 26 + en: Some("Bench Press".to_string()), 27 + custom: None, 28 + }; 29 + assert_eq!(name.to_string(), "Bench Press"); 30 + } 31 + 32 + #[test] 33 + fn test_name_display_custom_fallback() { 34 + let name = Name { 35 + en: None, 36 + custom: Some("My Exercise".to_string()), 37 + }; 38 + assert_eq!(name.to_string(), "My Exercise"); 39 + } 40 + 41 + #[test] 42 + fn test_name_display_unknown_fallback() { 43 + let name = Name { 44 + en: None, 45 + custom: None, 46 + }; 47 + assert_eq!(name.to_string(), "Unknown"); 48 + } 49 + 50 + #[test] 51 + fn test_name_from_name_en() { 52 + let name = Name { 53 + en: Some("Squat".to_string()), 54 + custom: None, 55 + }; 56 + assert_eq!(String::from(name), "Squat"); 57 + } 58 + 59 + #[test] 60 + fn test_name_from_name_custom_fallback() { 61 + let name = Name { 62 + en: None, 63 + custom: Some("Custom".to_string()), 64 + }; 65 + assert_eq!(String::from(name), "Custom"); 66 + } 67 + 68 + #[test] 69 + fn test_name_from_name_unknown_fallback() { 70 + let name = Name { 71 + en: None, 72 + custom: None, 73 + }; 74 + assert_eq!(String::from(name), "Unknown"); 75 + } 76 + 77 + #[test] 78 + fn test_name_from_string() { 79 + let name = Name::from("Deadlift".to_string()); 80 + assert_eq!(name.en.as_deref(), Some("Deadlift")); 81 + assert!(name.custom.is_none()); 82 + } 83 + 84 + // --------------------------------------------------------------------------- 85 + // MeasurementsResponse::merge — the only hand-written logic in measurement.rs 86 + // --------------------------------------------------------------------------- 87 + 88 + #[test] 89 + fn test_measurements_merge() { 90 + let a = response_from_fixture(); 91 + let b = response_from_fixture(); 92 + let original_count = a.embedded.measurements.len(); 93 + let merged = a.merge(b); 94 + assert_eq!(merged.embedded.measurements.len(), original_count * 2); 95 + } 96 + 97 + // --------------------------------------------------------------------------- 98 + // Deserialization with no next link (covers the None branch of Links.next) 99 + // --------------------------------------------------------------------------- 100 + 101 + #[test] 102 + fn test_measurements_response_no_next_link() { 103 + let json = r#"{ 104 + "_links": { "self": { "href": "/api/measurements?page=99" } }, 105 + "total": 0, 106 + "_embedded": { "measurement": [] } 107 + }"#; 108 + let response: MeasurementsResponse = serde_json::from_str(json).unwrap(); 109 + assert!(response.links.next.is_none()); 110 + assert!(response.embedded.measurements.is_empty()); 111 + }
+334
strong-api-lib/tests/strong_api_tests.rs
··· 1 + use reqwest::Url; 2 + use strong_api_lib::strong_api::{Includes, StrongApi}; 3 + use wiremock::matchers::{method, path, query_param}; 4 + use wiremock::{Mock, MockServer, ResponseTemplate}; 5 + async fn start_server() -> MockServer { 6 + MockServer::start().await 7 + } 8 + fn api(server: &MockServer) -> StrongApi { 9 + StrongApi::new(Url::parse(&server.uri()).unwrap()) 10 + } 11 + fn refused_api() -> StrongApi { 12 + StrongApi::new(Url::parse("http://127.0.0.1:1/").unwrap()) 13 + } 14 + fn login_body() -> serde_json::Value { 15 + serde_json::json!({ 16 + "accessToken": "test-access-token", 17 + "refreshToken": "test-refresh-token", 18 + "userId": "00000000-0000-0000-0000-000000000001" 19 + }) 20 + } 21 + fn user_response_body() -> serde_json::Value { 22 + serde_json::json!({ 23 + "_links": {}, 24 + "_embedded": { "log": [] }, 25 + "id": "00000000-0000-0000-0000-000000000001", 26 + "created": "2020-01-01T00:00:00Z", 27 + "lastChanged": "2020-01-01T00:00:00Z", 28 + "username": "testuser", 29 + "email": "test@example.com", 30 + "emailVerified": true, 31 + "name": null, 32 + "avatar": null, 33 + "preferences": {}, 34 + "legacyPurchase": null, 35 + "legacyGoals": null, 36 + "startHistoryFromDate": "2020-01-01", 37 + "firstWeekDay": "MONDAY", 38 + "availableLogins": [], 39 + "migrated": "false" 40 + }) 41 + } 42 + fn measurements_body() -> serde_json::Value { 43 + serde_json::json!({ 44 + "_links": { "self": { "href": "/api/measurements?page=1" } }, 45 + "total": 1, 46 + "_embedded": { 47 + "measurement": [{ 48 + "_links": { "self": { "href": "/api/measurements/aaaaaaaa-0000-0000-0000-000000000001" } }, 49 + "id": "aaaaaaaa-0000-0000-0000-000000000001", 50 + "created": "2021-01-01T00:00:00Z", 51 + "lastChanged": "2021-01-01T00:00:00Z", 52 + "name": { "en": "Squat", "custom": null }, 53 + "instructions": null, 54 + "media": [], 55 + "cellTypeConfigs": [], 56 + "isGlobal": true, 57 + "measurementType": "WEIGHT_AND_REPS" 58 + }] 59 + } 60 + }) 61 + } 62 + // --------------------------------------------------------------------------- 63 + // Includes Display 64 + // --------------------------------------------------------------------------- 65 + #[test] 66 + fn test_includes_display() { 67 + assert_eq!(Includes::Log.to_string(), "log"); 68 + assert_eq!(Includes::Measurement.to_string(), "measurement"); 69 + assert_eq!(Includes::Tag.to_string(), "tag"); 70 + assert_eq!(Includes::Widget.to_string(), "widget"); 71 + assert_eq!(Includes::Template.to_string(), "template"); 72 + assert_eq!(Includes::Folder.to_string(), "folder"); 73 + assert_eq!(Includes::MeasuredValue.to_string(), "measuredValue"); 74 + } 75 + // --------------------------------------------------------------------------- 76 + // StrongApi::new 77 + // --------------------------------------------------------------------------- 78 + #[test] 79 + fn test_strong_api_new_has_no_tokens() { 80 + let api = StrongApi::new(Url::parse("https://example.com").unwrap()); 81 + assert!(api.access_token.is_none()); 82 + assert!(api.refresh_token.is_none()); 83 + assert!(api.user_id.is_none()); 84 + } 85 + // --------------------------------------------------------------------------- 86 + // login — happy path + error paths 87 + // --------------------------------------------------------------------------- 88 + #[tokio::test] 89 + async fn test_login_sets_tokens() { 90 + let server = start_server().await; 91 + Mock::given(method("POST")) 92 + .and(path("/auth/login")) 93 + .respond_with(ResponseTemplate::new(200).set_body_json(login_body())) 94 + .mount(&server) 95 + .await; 96 + let mut api = api(&server); 97 + api.login("user", "pass").await.unwrap(); 98 + assert_eq!(api.access_token.as_deref(), Some("test-access-token")); 99 + assert_eq!(api.refresh_token.as_deref(), Some("test-refresh-token")); 100 + assert_eq!( 101 + api.user_id.as_deref(), 102 + Some("00000000-0000-0000-0000-000000000001") 103 + ); 104 + } 105 + #[tokio::test] 106 + async fn test_login_invalid_json_returns_error() { 107 + let server = start_server().await; 108 + Mock::given(method("POST")) 109 + .and(path("/auth/login")) 110 + .respond_with(ResponseTemplate::new(200).set_body_string("not json")) 111 + .mount(&server) 112 + .await; 113 + let mut api = api(&server); 114 + assert!(api.login("user", "pass").await.is_err()); 115 + } 116 + #[tokio::test] 117 + async fn test_login_send_failure_returns_error() { 118 + let mut api = refused_api(); 119 + assert!(api.login("user", "pass").await.is_err()); 120 + } 121 + // --------------------------------------------------------------------------- 122 + // refresh — happy path + error paths 123 + // --------------------------------------------------------------------------- 124 + #[tokio::test] 125 + async fn test_refresh_updates_tokens() { 126 + let server = start_server().await; 127 + Mock::given(method("POST")) 128 + .and(path("/auth/login/refresh")) 129 + .respond_with(ResponseTemplate::new(200).set_body_json(serde_json::json!({ 130 + "accessToken": "new-access-token", 131 + "refreshToken": "new-refresh-token", 132 + "userId": "00000000-0000-0000-0000-000000000001" 133 + }))) 134 + .mount(&server) 135 + .await; 136 + let mut api = api(&server); 137 + api.access_token = Some("old-token".to_string()); 138 + api.refresh_token = Some("old-refresh".to_string()); 139 + api.refresh().await.unwrap(); 140 + assert_eq!(api.access_token.as_deref(), Some("new-access-token")); 141 + assert_eq!(api.refresh_token.as_deref(), Some("new-refresh-token")); 142 + } 143 + #[tokio::test] 144 + async fn test_refresh_without_access_token_returns_error() { 145 + let mut api = refused_api(); 146 + let result = api.refresh().await; 147 + assert!(result.is_err()); 148 + assert!( 149 + result 150 + .unwrap_err() 151 + .to_string() 152 + .contains("Missing access token") 153 + ); 154 + } 155 + #[tokio::test] 156 + async fn test_refresh_invalid_json_returns_error() { 157 + let server = start_server().await; 158 + Mock::given(method("POST")) 159 + .and(path("/auth/login/refresh")) 160 + .respond_with(ResponseTemplate::new(200).set_body_string("not json")) 161 + .mount(&server) 162 + .await; 163 + let mut api = api(&server); 164 + api.access_token = Some("token".to_string()); 165 + api.refresh_token = Some("refresh".to_string()); 166 + assert!(api.refresh().await.is_err()); 167 + } 168 + #[tokio::test] 169 + async fn test_refresh_send_failure_returns_error() { 170 + let mut api = refused_api(); 171 + api.access_token = Some("token".to_string()); 172 + api.refresh_token = Some("refresh".to_string()); 173 + assert!(api.refresh().await.is_err()); 174 + } 175 + // --------------------------------------------------------------------------- 176 + // get_user — happy path + all error paths 177 + // --------------------------------------------------------------------------- 178 + #[tokio::test] 179 + async fn test_get_user_success() { 180 + let server = start_server().await; 181 + Mock::given(method("GET")) 182 + .and(path("/api/users/00000000-0000-0000-0000-000000000001")) 183 + .respond_with(ResponseTemplate::new(200).set_body_json(user_response_body())) 184 + .mount(&server) 185 + .await; 186 + let mut api = api(&server); 187 + api.access_token = Some("token".to_string()); 188 + api.user_id = Some("00000000-0000-0000-0000-000000000001".to_string()); 189 + let user = api.get_user("", 10, vec![Includes::Log]).await.unwrap(); 190 + assert_eq!(user.id, "00000000-0000-0000-0000-000000000001"); 191 + } 192 + #[tokio::test] 193 + async fn test_get_user_without_user_id_returns_error() { 194 + let mut api = refused_api(); 195 + api.access_token = Some("token".to_string()); 196 + let result = api.get_user("", 10, vec![]).await; 197 + assert!(result.is_err()); 198 + assert!(result.unwrap_err().to_string().contains("Missing user id")); 199 + } 200 + #[tokio::test] 201 + async fn test_get_user_without_access_token_returns_error() { 202 + let mut api = refused_api(); 203 + api.user_id = Some("00000000-0000-0000-0000-000000000001".to_string()); 204 + assert!(api.get_user("", 10, vec![]).await.is_err()); 205 + } 206 + #[tokio::test] 207 + async fn test_get_user_known_api_error_response() { 208 + let server = start_server().await; 209 + Mock::given(method("GET")) 210 + .and(path("/api/users/00000000-0000-0000-0000-000000000001")) 211 + .respond_with(ResponseTemplate::new(401).set_body_json(serde_json::json!({ 212 + "code": "UNAUTHORIZED", 213 + "description": "Invalid token" 214 + }))) 215 + .mount(&server) 216 + .await; 217 + let mut api = api(&server); 218 + api.access_token = Some("bad-token".to_string()); 219 + api.user_id = Some("00000000-0000-0000-0000-000000000001".to_string()); 220 + let result = api.get_user("", 10, vec![]).await; 221 + assert!(result.is_err()); 222 + assert!(result.unwrap_err().to_string().contains("UNAUTHORIZED")); 223 + } 224 + /// Hits the serde_json error branch inside `if !status.is_success()` (line 214) 225 + #[tokio::test] 226 + async fn test_get_user_error_response_with_invalid_json_body_returns_error() { 227 + let server = start_server().await; 228 + Mock::given(method("GET")) 229 + .and(path("/api/users/00000000-0000-0000-0000-000000000001")) 230 + .respond_with(ResponseTemplate::new(403).set_body_string("not json")) 231 + .mount(&server) 232 + .await; 233 + let mut api = api(&server); 234 + api.access_token = Some("token".to_string()); 235 + api.user_id = Some("00000000-0000-0000-0000-000000000001".to_string()); 236 + assert!(api.get_user("", 10, vec![]).await.is_err()); 237 + } 238 + /// Hits the serde_json error branch for a 200 response with invalid JSON (line ~220) 239 + #[tokio::test] 240 + async fn test_get_user_invalid_json_success_response_returns_error() { 241 + let server = start_server().await; 242 + Mock::given(method("GET")) 243 + .and(path("/api/users/00000000-0000-0000-0000-000000000001")) 244 + .respond_with(ResponseTemplate::new(200).set_body_string("not json")) 245 + .mount(&server) 246 + .await; 247 + let mut api = api(&server); 248 + api.access_token = Some("token".to_string()); 249 + api.user_id = Some("00000000-0000-0000-0000-000000000001".to_string()); 250 + assert!(api.get_user("", 10, vec![]).await.is_err()); 251 + } 252 + #[tokio::test] 253 + async fn test_get_user_send_failure_returns_error() { 254 + let mut api = refused_api(); 255 + api.access_token = Some("token".to_string()); 256 + api.user_id = Some("00000000-0000-0000-0000-000000000001".to_string()); 257 + assert!(api.get_user("", 10, vec![]).await.is_err()); 258 + } 259 + // --------------------------------------------------------------------------- 260 + // get_measurements — happy path + error paths 261 + // --------------------------------------------------------------------------- 262 + #[tokio::test] 263 + async fn test_get_measurements_success() { 264 + let server = start_server().await; 265 + Mock::given(method("GET")) 266 + .and(path("/api/measurements")) 267 + .and(query_param("page", "1")) 268 + .respond_with(ResponseTemplate::new(200).set_body_json(measurements_body())) 269 + .mount(&server) 270 + .await; 271 + let api = api(&server); 272 + let result = api.get_measurements(1).await.unwrap(); 273 + assert_eq!(result.total, 1); 274 + assert_eq!(result.embedded.measurements[0].name.to_string(), "Squat"); 275 + } 276 + #[tokio::test] 277 + async fn test_get_measurements_invalid_json_returns_error() { 278 + let server = start_server().await; 279 + Mock::given(method("GET")) 280 + .and(path("/api/measurements")) 281 + .respond_with(ResponseTemplate::new(200).set_body_string("not json")) 282 + .mount(&server) 283 + .await; 284 + assert!(api(&server).get_measurements(1).await.is_err()); 285 + } 286 + #[tokio::test] 287 + async fn test_get_measurements_send_failure_returns_error() { 288 + assert!(refused_api().get_measurements(1).await.is_err()); 289 + } 290 + // --------------------------------------------------------------------------- 291 + // get_logs_raw — happy path + all error paths 292 + // --------------------------------------------------------------------------- 293 + #[tokio::test] 294 + async fn test_get_logs_raw_success() { 295 + let server = start_server().await; 296 + Mock::given(method("GET")) 297 + .and(path("/api/logs/00000000-0000-0000-0000-000000000001")) 298 + .respond_with(ResponseTemplate::new(200).set_body_string(r#"{"logs":[]}"#)) 299 + .mount(&server) 300 + .await; 301 + let mut api = api(&server); 302 + api.access_token = Some("token".to_string()); 303 + api.user_id = Some("00000000-0000-0000-0000-000000000001".to_string()); 304 + let raw = api.get_logs_raw().await.unwrap(); 305 + assert_eq!(raw, r#"{"logs":[]}"#); 306 + } 307 + #[tokio::test] 308 + async fn test_get_logs_raw_without_user_id_returns_error() { 309 + let mut api = refused_api(); 310 + api.access_token = Some("token".to_string()); 311 + let result = api.get_logs_raw().await; 312 + assert!(result.is_err()); 313 + assert!(result.unwrap_err().to_string().contains("Missing user id")); 314 + } 315 + #[tokio::test] 316 + async fn test_get_logs_raw_without_access_token_returns_error() { 317 + let mut api = refused_api(); 318 + api.user_id = Some("00000000-0000-0000-0000-000000000001".to_string()); 319 + let result = api.get_logs_raw().await; 320 + assert!(result.is_err()); 321 + assert!( 322 + result 323 + .unwrap_err() 324 + .to_string() 325 + .contains("Missing access token") 326 + ); 327 + } 328 + #[tokio::test] 329 + async fn test_get_logs_raw_send_failure_returns_error() { 330 + let mut api = refused_api(); 331 + api.access_token = Some("token".to_string()); 332 + api.user_id = Some("00000000-0000-0000-0000-000000000001".to_string()); 333 + assert!(api.get_logs_raw().await.is_err()); 334 + }
+4
strong-api-lib/tests/workout_tests.rs
··· 1 + // UserResponse and related workout structs are plain #[derive(Deserialize)] types with no logic. 2 + // Their deserialization is covered by data_transformer_tests.rs which parses the same fixture. 3 + // This file is intentionally empty. 4 + //