Turn an AI training plan into a short SharePlan link.
Instructions for ChatGPT, Claude, Gemini, Grok and other AIs to publish a training plan as a short, illustrated SharePlan workout link. No SharePlan account or API key is required.
Instructions for the AI
Create the link. Never guess it.
An assistant that can send the request returns the short link and private edit key. Otherwise it returns valid JSON for the manual fallback.
SharePlan short-link handoff — version 4
Purpose
Publish the training plan already created in this conversation to SharePlan.
Return a short SharePlan program URL and the private edit key to the user.
SharePlan illustrates matching exercises and provides guided workout mode.
Preserve the existing plan
- Format the plan already agreed with the user; do not generate a new plan.
- Preserve days, exercises, order, sets, repetitions, loads, rest and notes.
- Do not invent missing prescriptions. Omit optional fields when unspecified.
- If a required block field is missing or ambiguous, ask the user before returning
the JSON or sending a request. Do not replace exercises to force a catalogue match.
Do not invent a SharePlan URL
- Never make up a slug, program ID, #plan link or #p link.
- A valid short link exists only after the POST request below returns HTTP 201.
- Do not claim that SharePlan is blocked unless you actually tried the exact URL.
Preferred path: create the short link
If your environment can make an HTTP POST request, send the strict JSON object
described below to:
POST https://shareplan.fit/ai/programs
Content-Type: application/json
The response has this shape:
{"programId":"...","publicUrl":"https://shareplan.fit/p/...","workoutUrl":"https://shareplan.fit/p/.../workout","editUrl":"https://shareplan.fit/p/...#edit=...","editKey":"..."}
After HTTP 201, give the user:
1. publicUrl as the short link to open and train;
2. editKey as the private key that lets their AI update the same program later;
3. a warning not to share editKey or editUrl. publicUrl and workoutUrl are safe to share.
Do not create a second program after a successful response. Keep programId and
editKey in this conversation for later changes. Never expose the edit key to
anyone except the user who requested the program.
Update the same program later
1. Read GET https://shareplan.fit/api/programs/PROGRAM_ID and keep updatedAt.
2. Ask the user to confirm the complete revised plan before changing it.
3. Send the full revised program with expectedUpdatedAt to:
PUT https://shareplan.fit/ai/programs/PROGRAM_ID
Authorization: Bearer EDIT_KEY
Content-Type: application/json
The PUT body must contain only expectedUpdatedAt, program and the optional
title, description and contentLanguage fields. Do not include generator,
programId or editKey in the body.
4. A 409 response means the program changed. Read it again and do not overwrite
the newer revision blindly.
Fallback when POST is unavailable
Do not generate a long encoded URL and do not guess a short URL. Return the
strict JSON in one code block and tell the user to paste it at:
https://shareplan.fit/import
They will review the days, blocks and exercises, then explicitly save and open it.
Minimal valid request
{"title":"Full body — 3 days","contentLanguage":"en","generator":{"provider":"chatgpt"},"program":{"schemaVersion":2,"title":"Full body — 3 days","days":[{"id":"day-1","name":"Day 1","blocks":[{"id":"main-strength","type":"strength","name":"Main strength","exercises":[{"name":"Squat Clean","sets":4,"reps":5,"restSeconds":120},{"name":"Push-Up","sets":3,"reps":"8-12","restSeconds":75}]}]}]}}
Top-level JSON
- title: optional string
- description: optional string
- contentLanguage: optional language tag such as en, fr, es, de, it, pt-BR
- generator: optional object with provider (chatgpt, claude, gemini, grok, or
other) and optional model
- program: required program object
Program object
- schemaVersion: exactly 2
- title and description: optional strings
- days: 1 to 14 day objects
Day object
- id: unique letters/numbers/hyphens/underscores, maximum 64 characters
- name: required string
- subtitle: optional string
- blocks: one or more block objects
Common block fields
- id: unique within the day
- type: strength, circuit, emom, amrap, forTime, interval, endurance, flow,
skill, or recovery
- name, notes: optional strings
- prepareSeconds, transitionSeconds: optional non-negative integers
- autoAdvance: optional boolean
Block-specific required fields
- strength: exercises array
- circuit: rounds and exercises array; optional restBetweenRoundsSeconds
- emom: durationMinutes and exercises array; optional intervalSeconds
- amrap: durationMinutes and exercises array
- forTime: exercises array; optional rounds and timeCapSeconds
- interval: rounds, workSeconds, restSeconds, exercises array; optional sets and
restBetweenSetsSeconds
- endurance: activity plus at least one of durationSeconds, distanceMeters, or
calories; optional targetPace
- flow: movements array; optional rounds
- skill: movements array
- recovery: movements array
Movement fields
- Always provide name. Use the standard English exercise name when possible so
SharePlan can attach a matching animation. Use displayName for a localized
label when useful.
- Do not invent exerciseId. Omit it unless you already know a real SharePlan ID.
- strength exercises may use sets, reps, loadKg, rpe, rir, tempo, restSeconds,
notes
- circuit/emom/amrap/forTime/interval exercises may use reps, durationSeconds,
distanceMeters, calories, restSeconds, notes
- flow/recovery movements may use durationSeconds, reps, side, notes
- skill movements may use attempts, reps, holdSeconds, assistance, restSeconds,
notes
Privacy and safety
- Never include addresses, medical records or identifying private information.
- The program content and publicUrl are public. editKey and editUrl are private.
- Do not present a training plan as medical diagnosis or rehabilitation advice.