Gymnee API
記録・自己ベスト・体重・パーティの状況を読み、記録を足す REST API です。MCP の道具と同じ定義から作っているので、できることは同じです。
API リファレンス(全操作の入力と出力) ・ openapi.json
はじめかた
- アプリの その他 > 連携 > API キーを作る で、名前とできることを選んで作ります。キーは作った直後の 1 回しか表示されません。
- キーを
Authorizationヘッダーに付けて呼びます。curl -s https://api.gymnee.app/v1/summary \ -H "Authorization: Bearer $GYMNEE_TOKEN" - 返ってくるのは
{"data": …}の形の JSON です。
記録を足す
「記録を足す」を付けたキーで呼べます。種目は名前か id で指定します。名前が一つに決まらないときは 422 と候補が返るので、選び直して送り直してください。
curl -s https://api.gymnee.app/v1/workouts \
-H "Authorization: Bearer $GYMNEE_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 2026-11-05-morning" \
-d '{
"name": "胸の日",
"durationMinutes": 45,
"exercises": [
{ "name": "ベンチプレス", "sets": [{ "weightKg": 60, "reps": 10 }, { "weightKg": 62.5, "reps": 8 }] },
{ "name": "腕立て伏せ", "sets": [{ "reps": 20 }] }
]
}'
- Idempotency-Key を付けると、同じ鍵での 2 回目は何も増やさず、1 回目の記録を返します(200)。通信が切れて送り直すときに二重にならないよう、付けることを勧めます。
- 自己ベストは、アプリで記録したときと同じ規則で判定します。
- 記録はアプリを開くと同期されます。消す・直すはアプリだけで行います。
- 1 年より前と、未来の時刻の記録は足せません。
権限
| 権限 | できること |
|---|---|
read | 記録・自己ベスト・体重(アプリで記録した分。ヘルスケアから取り込んだ値は出しません)・パーティの状況を読む(どのキーにも付きます) |
workouts:write | ワークアウトの記録を足す |
coach:write | アプリのコーチ画面にメニューを提案する |
権限が足りない操作は 403 で、WWW-Authenticate ヘッダーに要る権限が入ります。
決まりごと
- 日時は ISO 8601、重量は kg、距離は km、時間は秒です。補助付きの自重種目は、重量を負の値で表します(-10 = 10kg の補助)。
- 週は日本時間の月曜始まりです。
- 呼び出しは 1 人あたり 1 分に 120 回までです。超えると 429 と
Retry-Afterが返ります。 - 読めるのは、キーを作った本人の記録だけです。
エラーの形
{ "error": { "code": "unresolved", "message": "記録の中身を確かめて", "details": [ … ] } }
| 400 | 入力の形が違う(知らない項目も受け付けません) |
|---|---|
| 401 | キーが無い・消された |
| 403 | 権限が足りない |
| 404 | 見つからない |
| 422 | 種目が決まらない・値が足りない(details に理由と候補) |
| 429 | 呼び出しが多すぎる |
OAuth で使う
MCP クライアントのように OAuth 2.1 に対応したものは、キーを使わずにつなげます。認可サーバーの情報は https://api.gymnee.app/.well-known/oauth-authorization-server にあります(動的クライアント登録・Client ID Metadata Document・PKCE に対応)。ログインの代わりに、利用者が iPhone の Gymnee で承認します。
キーはパスワードと同じように扱ってください。コードに書き込んで公開しない・人に渡さない。漏れたら その他 > 連携 ですぐに消せます。