Kinetic custom import format for community packs and custom programs.
This page explains the JSON formats Kinetic currently accepts for custom strength content. It is meant for developers, IDE agents, AI workflows, and community contributors who want to build reusable workout libraries, dated planners, or importable strength packs that Kinetic can open directly.
What this page covers
- The accepted custom import file families.
- The exact enum values Kinetic expects.
- When to reuse built-in exercises instead of creating duplicates.
- Examples, schema shapes, validator access, prompt templates, and import steps.
Accepted file families
.kinetic-workout-libraryfor reusable workouts and custom exercises..kinetic-strength-planfor dated calendars, schedules, and rest days.- Plain
.jsonis also accepted if the payload matches one of the supported schemas.
Need a starting point for AI prompts or manual editing? Download the sample files: sample workout library and sample strength plan.
1. Scope
Kinetic currently accepts two import families for custom strength content. If you are creating reusable saved workouts or a community exercise pack, use the workout library format. If you are creating a weekly split, dated schedule, or planner, use the strength planning calendar format.
Strength Workout Library
Use this for reusable saved workouts and custom exercises.
.kinetic-workout-library
.json
Strength Planning Calendar
Use this for dated plans, weekly schedules, rest days, and planned exercise blocks.
.kinetic-strength-plan
.json
Kinetic does not currently accept a separate custom schedule file type beyond the strength planning format. If someone asks for a planner, schedule, or dated split, that still maps to the strength planning calendar schema.
2. Encoding Rules
All accepted import files should follow these rules:
- Format: JSON.
- Character set: UTF-8.
- Dates: full ISO 8601 date-time strings.
schemaVersion: integer.bodyRegionsRaw: comma-separated raw values, such as"chest,triceps,shoulders".- Field names are case-sensitive.
- Unknown enum strings may import badly or fall back incorrectly, so use the exact enum values listed on this page.
Kinetic exports pretty-printed JSON with sorted keys. Importers do not need to match that exact formatting, but matching it makes review and debugging much easier.
Date format matters more than it may seem. Do not use loose date-only strings like 2026-04-06. Use full ISO 8601 date-time strings such as 2026-04-06T00:00:00Z for exportedAt, createdAt, updatedAt, and plan entry date.
3. Strict vs Flexible Fields
Some fields must use exact Kinetic-supported values. Others are flexible text fields intended for names, notes, branding, and explanation.
Strict fields
These fields must use exact supported raw values:
schemaVersion
exerciseCategory
equipment
bodyRegionsRaw
entryType
Flexible fields
These fields are free text:
name
title
notes
goal
category on workout programs
appVersion
If the strict fields use unsupported values, import behavior may break, search may degrade, and filters or body-region mapping may stop behaving correctly.
| Field | Type | Strict? | Accepted Values |
|---|---|---|---|
schemaVersion |
integer | Yes | 1 |
exerciseCategory |
string | Yes | push, pull, squat, hinge, lunge, carry, rotation, isolation, core |
equipment |
string | Yes | bodyweight, dumbbell, barbell, kettlebell, cable, machine, band, smith, trap_bar |
bodyRegionsRaw |
string | Yes | Comma-separated list using the supported body region raw values below. |
entryType |
string | Yes | workout, rest |
name |
string | No | Free text. |
title |
string | No | Free text. |
notes |
string | No | Free text. |
goal |
string | No | Free text. |
category |
string | No | Free text. |
appVersion |
string | No | Free text. |
4. Allowed Enum Values
Strength exercise category
push
pull
squat
hinge
lunge
carry
rotation
isolation
core
Equipment
bodyweight
dumbbell
barbell
kettlebell
cable
machine
band
smith
trap_bar
Body region raw values
chest
upperBack
lowerBack
shoulders
biceps
triceps
forearms
core
glutes
quads
hamstrings
calves
adductors
abductors
traps
{
"bodyRegionsRaw": "chest,shoulders,triceps"
}
5. Reuse Built-In Exercises First
Before creating a customExercises entry, check whether Kinetic already ships the movement as a built-in strength exercise. If it exists in the default library, use the built-in exerciseIdentifier instead of creating a duplicate custom exercise with the same meaning.
- Built-in exercises stay aligned with Kinetic search and body-region mapping.
- Community packs stay cleaner and more interoperable.
- Users avoid duplicate entries like
Barbell Bench PressandBarbell Bench Press Custom.
Rule: if the movement exists in the default library, use its exact id as exerciseIdentifier. Only create a customExercises entry when the movement truly does not exist in the built-in library.
Important: built-in exercises do not need a separate built-in UUID field in the import JSON. For built-ins, Kinetic matches on exerciseIdentifier. The id on each exercise row is just that row's own UUID. The UUID that matters for custom exercise linking is the customExercises[].id, because custom references use custom-<lowercased-uuid>.
| Built-In Exercise | exerciseIdentifier |
Category | Equipment |
|---|---|---|---|
| Barbell Back Squat | barbell_back_squat | squat | barbell |
| Romanian Deadlift | romanian_deadlift | hinge | barbell |
| Dumbbell Bench Press | dumbbell_bench_press | push | dumbbell |
| Pull-Up | pull_up | pull | bodyweight |
| Walking Lunge | walking_lunge | lunge | dumbbell |
| Overhead Press | overhead_press | push | barbell |
| Cable Row | cable_row | pull | cable |
| Goblet Squat | goblet_squat | squat | dumbbell |
| Farmer's Carry | farmers_carry | carry | dumbbell |
| Plank | plank | core | bodyweight |
| Leg Press | leg_press | squat | machine |
| Cable Face Pull | cable_face_pull | pull | cable |
| Barbell Bench Press | barbell_bench_press | push | barbell |
| Incline Dumbbell Press | incline_dumbbell_press | push | dumbbell |
| Lat Pulldown | lat_pulldown | pull | cable |
| Seated Cable Row | seated_cable_row | pull | cable |
| Barbell Bent-Over Row | barbell_bent_over_row | pull | barbell |
| Dumbbell Lateral Raise | dumbbell_lateral_raise | isolation | dumbbell |
| Triceps Pushdown | triceps_pushdown | isolation | cable |
| Dumbbell Biceps Curl | dumbbell_biceps_curl | isolation | dumbbell |
| Bulgarian Split Squat | bulgarian_split_squat | lunge | dumbbell |
| Glute Bridge | glute_bridge | hinge | bodyweight |
| Standing Calf Raise | standing_calf_raise | isolation | machine |
| Dead Bug | dead_bug | core | bodyweight |
Correct built-in reference example
{
"id": "A4C39D24-BA98-45E8-A668-3E8B5F5E8D7A",
"exerciseIdentifier": "barbell_bench_press",
"exerciseName": "Barbell Bench Press",
"exerciseCategory": "push",
"equipment": "barbell",
"bodyRegionsRaw": "chest,triceps,shoulders",
"sortOrder": 0,
"targetSets": 4,
"targetReps": 8,
"targetWeight": 135,
"targetRestSeconds": 120
}
In this example, barbell_bench_press is enough to target the built-in movement. Do not add a duplicate custom exercise entry for Barbell Bench Press.
When to create a custom exercise instead
- A gym-specific machine movement.
- A renamed house variation used by a coach or creator.
- An uncommon cable or band drill not in the default library.
- A specialty bar or unilateral variation that needs its own entry.
6. Supported Import Formats
Format 1: Strength Workout Library
Use this format to import saved strength workouts, workout packs, community workout libraries, and custom exercises.
Top-level shape
{
"schemaVersion": 1,
"exportedAt": "2026-03-28T18:00:00Z",
"appVersion": "1.0 (1)",
"programs": [],
"customExercises": []
}
Workout library schema
{
"schemaVersion": 1,
"exportedAt": "ISO8601 date",
"appVersion": "string",
"programs": [
{
"id": "UUID",
"name": "string",
"category": "string",
"notes": "string",
"createdAt": "ISO8601 date",
"updatedAt": "ISO8601 date",
"exercises": [
{
"id": "UUID",
"exerciseIdentifier": "string",
"exerciseName": "string",
"exerciseCategory": "push|pull|squat|hinge|lunge|carry|rotation|isolation|core",
"equipment": "bodyweight|dumbbell|barbell|kettlebell|cable|machine|band|smith|trap_bar",
"bodyRegionsRaw": "comma-separated body region raw values",
"sortOrder": 0,
"targetSets": 3,
"targetReps": 8,
"targetWeight": 135.0,
"targetRestSeconds": 90
}
]
}
],
"customExercises": [
{
"id": "UUID",
"name": "string",
"category": "push|pull|squat|hinge|lunge|carry|rotation|isolation|core",
"equipment": "bodyweight|dumbbell|barbell|kettlebell|cable|machine|band|smith|trap_bar",
"bodyRegionsRaw": "comma-separated body region raw values",
"createdAt": "ISO8601 date",
"updatedAt": "ISO8601 date"
}
]
}
Important workout library rules
programsare reusable saved workouts, not dated calendar entries.categoryon a program is free text.exerciseIdentifiershould match the built-in exercise id when referencing a built-in movement. No separate built-in UUID field is required.- For imported custom exercises, Kinetic remaps identifiers during import based on
customExercises[].id. - If a program references an imported custom exercise, use
"custom-<lowercased-uuid-from-customExercises[].id>". - The exercise row's own
idis not the built-in exercise id. It is just the UUID for that imported row. - Duplicate workout and custom exercise names are resolved with collision-safe copy names during import.
Example workout library file
{
"schemaVersion": 1,
"exportedAt": "2026-03-28T18:00:00Z",
"appVersion": "Community Pack 1",
"programs": [
{
"id": "2A9137A7-2F74-4FCA-B1A1-B91ECF3F7F14",
"name": "Upper Hypertrophy A",
"category": "Hypertrophy Split",
"notes": "Chest, shoulders, triceps focus.",
"createdAt": "2026-03-28T18:00:00Z",
"updatedAt": "2026-03-28T18:00:00Z",
"exercises": [
{
"id": "A4C39D24-BA98-45E8-A668-3E8B5F5E8D7A",
"exerciseIdentifier": "barbell_bench_press",
"exerciseName": "Barbell Bench Press",
"exerciseCategory": "push",
"equipment": "barbell",
"bodyRegionsRaw": "chest,shoulders,triceps",
"sortOrder": 0,
"targetSets": 4,
"targetReps": 8,
"targetWeight": 135,
"targetRestSeconds": 120
}
]
}
],
"customExercises": [
{
"id": "B4D0D1E5-DF45-4A7A-B2AF-0A7E87F93289",
"name": "Cable High Crossover",
"category": "push",
"equipment": "cable",
"bodyRegionsRaw": "chest,shoulders",
"createdAt": "2026-03-28T18:00:00Z",
"updatedAt": "2026-03-28T18:00:00Z"
}
]
}
Format 2: Strength Planning Calendar
Use this format to import custom planners, weekly or monthly schedules, dated hypertrophy or strength splits, preplanned rest days, and community schedule packs.
Top-level shape
{
"schemaVersion": 1,
"exportedAt": "2026-03-28T18:00:00Z",
"appVersion": "1.0 (1)",
"plans": []
}
Strength planning schema
{
"schemaVersion": 1,
"exportedAt": "ISO8601 date",
"appVersion": "string",
"plans": [
{
"id": "UUID",
"name": "string",
"goal": "string",
"notes": "string",
"createdAt": "ISO8601 date",
"updatedAt": "ISO8601 date",
"entries": [
{
"id": "UUID",
"date": "ISO8601 date-time",
"entryType": "workout|rest",
"title": "string",
"notes": "string",
"exercises": [
{
"id": "UUID",
"exerciseIdentifier": "string",
"exerciseName": "string",
"exerciseCategory": "push|pull|squat|hinge|lunge|carry|rotation|isolation|core",
"equipment": "bodyweight|dumbbell|barbell|kettlebell|cable|machine|band|smith|trap_bar",
"bodyRegionsRaw": "comma-separated body region raw values",
"sortOrder": 0,
"targetSets": 3,
"targetReps": 8,
"targetWeight": 0,
"targetRestSeconds": 90
}
]
}
]
}
]
}
Important planning rules
plansare reusable named calendars.entriesare dated, so this is the correct format for schedules.datemust be a full ISO 8601 date-time string, for example2026-04-07T00:00:00Z.entryTypemust be exactlyworkoutorrest.- A
restentry should generally have an emptyexercisesarray. titleis free text, such asChest,Back,Rest Day, orPush A.- Plan names import with collision-safe copy names if duplicates already exist.
For plans[].entries[].date, use a full timestamp like 2026-04-07T00:00:00Z. Plain YYYY-MM-DD values are easy for AI to generate, but they are not the safe format to use here.
Example strength plan file
{
"schemaVersion": 1,
"exportedAt": "2026-03-28T18:00:00Z",
"appVersion": "Community Plan Pack 1",
"plans": [
{
"id": "931761E7-38E7-4F77-8BA4-87CC8F442FF5",
"name": "Hypertrophy Week 1",
"goal": "Build muscle with varied movement selection week to week.",
"notes": "Duplicate forward and swap compounds as needed.",
"createdAt": "2026-03-28T18:00:00Z",
"updatedAt": "2026-03-28T18:00:00Z",
"entries": [
{
"id": "974FF916-4B25-4E2D-8F6F-78A1655E7E9D",
"date": "2026-03-30T00:00:00Z",
"entryType": "workout",
"title": "Chest Monday",
"notes": "Primary chest focus.",
"exercises": [
{
"id": "5CD4C78D-F9CC-4FD5-A0CD-F4C1E1909DB2",
"exerciseIdentifier": "barbell_bench_press",
"exerciseName": "Barbell Bench Press",
"exerciseCategory": "push",
"equipment": "barbell",
"bodyRegionsRaw": "chest,shoulders,triceps",
"sortOrder": 0,
"targetSets": 4,
"targetReps": 8,
"targetWeight": 135,
"targetRestSeconds": 120
}
]
},
{
"id": "E75A9EB0-9CCB-45FD-A7FD-EA442A1C78B1",
"date": "2026-04-01T00:00:00Z",
"entryType": "rest",
"title": "Rest Day",
"notes": "Light walk only.",
"exercises": []
}
]
}
]
}
7. Mapping Requests To Formats
| User Goal | Correct Format |
|---|---|
| Reusable custom workouts | Strength workout library |
| Community workout pack | Strength workout library |
| Custom exercise pack | Strength workout library |
| Weekly training split with dates | Strength planning calendar |
| Monthly schedule | Strength planning calendar |
| Duplicate-ready weekly hypertrophy calendar | Strength planning calendar |
| Rest-day schedule | Strength planning calendar |
8. AI Prompt Templates
These prompt blocks are designed for ChatGPT, Codex, Claude, Cursor, Windsurf, or IDE agents. Copy one, then replace the brief at the bottom.
Prompt: generate a workout library pack
Generate a valid Kinetic strength workout library JSON file. Requirements: - Output JSON only. - Use schemaVersion 1. - Use full ISO 8601 date-time strings such as 2026-04-07T00:00:00Z. - Include top-level fields: schemaVersion, exportedAt, appVersion, programs, customExercises. - Use exact enum values for exerciseCategory, equipment, and bodyRegionsRaw. - bodyRegionsRaw must be a comma-separated string using only: chest, upperBack, lowerBack, shoulders, biceps, triceps, forearms, core, glutes, quads, hamstrings, calves, adductors, abductors, traps - Each program must include id, name, category, notes, createdAt, updatedAt, and exercises. - Each exercise must include id, exerciseIdentifier, exerciseName, exerciseCategory, equipment, bodyRegionsRaw, sortOrder, targetSets, targetReps, targetWeight, targetRestSeconds. - If you include customExercises, each must include id, name, category, equipment, bodyRegionsRaw, createdAt, updatedAt. - Use realistic UUIDs. - Do not include markdown fences. Pack brief: [PASTE THE COMMUNITY PACK OR CUSTOM LIBRARY REQUEST HERE]
Prompt: generate a strength planning calendar
Generate a valid Kinetic strength planning JSON file. Requirements: - Output JSON only. - Use schemaVersion 1. - Use full ISO 8601 date-time strings such as 2026-04-07T00:00:00Z. - Include top-level fields: schemaVersion, exportedAt, appVersion, plans. - Use exact enum values for exerciseCategory, equipment, and bodyRegionsRaw. - entryType must be exactly workout or rest. - bodyRegionsRaw must be a comma-separated string using only: chest, upperBack, lowerBack, shoulders, biceps, triceps, forearms, core, glutes, quads, hamstrings, calves, adductors, abductors, traps - Each plan must include id, name, goal, notes, createdAt, updatedAt, and entries. - Each entry must include id, date, entryType, title, notes, and exercises. - Each entry date must be a full ISO 8601 timestamp, not YYYY-MM-DD. - Workout entries should include planned exercises. - Rest entries should usually have an empty exercises array. - Each exercise must include id, exerciseIdentifier, exerciseName, exerciseCategory, equipment, bodyRegionsRaw, sortOrder, targetSets, targetReps, targetWeight, targetRestSeconds. - Use realistic UUIDs. - Do not include markdown fences. Planning brief: [PASTE THE WEEKLY SPLIT OR SCHEDULE REQUEST HERE]
Prompt: convert existing spreadsheet notes or a dump
Convert the following training notes into a valid Kinetic import file. Rules: - Decide whether the content is better represented as: 1. a strength workout library, or 2. a strength planning calendar - Output JSON only. - Use the exact Kinetic schema for the chosen format. - Use schemaVersion 1. - Use full ISO 8601 date-time strings such as 2026-04-07T00:00:00Z. - Normalize all enum values to valid Kinetic raw values. - Keep titles and notes human-readable. - Preserve exercise order using sortOrder starting at 0. - Use an empty exercises array for rest days. - Do not include markdown fences or explanations. Source content: [PASTE NOTES, CSV ROWS, OR SPREADSHEET CONTENT HERE]
9. Validate Before Importing
If you are building files by hand, generating them with AI, or assembling community packs in an IDE, validate them before trying them on device. The web validator is intentionally stricter than Kinetic app import behavior so creators can catch bad enums, missing fields, duplicate sort orders, and redundant custom exercises early.
Use the validator for paste-based checks, file upload checks, forced schema validation, machine-readable results, and normalized JSON export.
You can also start from known-good payloads: download the sample workout library or download the sample strength plan.
10. Import Instructions
Import a workout library
- Generate or download a valid
.kinetic-workout-libraryfile. - Put it in Files, AirDrop it, or download it on the device.
- Open Kinetic.
- Go to
Settings. - Find the strength library import/export area.
- Tap the import action.
- Choose the file.
- Kinetic imports programs and custom exercises with collision-safe names.
Import a strength plan
- Generate or download a valid
.kinetic-strength-planfile. - Put it in Files, AirDrop it, or download it on the device.
- Open Kinetic.
- Go to the
Strength Planner. - Use the import action.
- Choose the file.
- Kinetic imports the plan and renames duplicates safely.
11. Packaging Advice For Community Packs
- Prefer one coherent theme per file, such as
upper-lower-hypertrophy-pack.kinetic-workout-libraryor8-week-summer-cut.kinetic-strength-plan. - Use plain English titles and notes.
- Keep planner dates intentional. If the pack is meant to be reused weekly, say that in notes.
- Include both a planner file and a workout library file when shipping a complete community pack.
Best split for complete packs: one library file for reusable workouts and custom exercises, plus one planner file for the dated schedule.
12. Current Compatibility Notes
- Kinetic currently imports schema version
1. - Kinetic accepts both custom file extensions and plain
.json, as long as the JSON matches a valid accepted payload. - Strength planning imports are currently strength-only.
- Not every custom concept is a separate file type. For now, planner and schedule both map to the strength planning format.