Editor URL API
Build a link, and it opens the Indoor Bike workout editor with your workout already loaded. No backend, no account, no SDK - the workout lives entirely in the URL. Perfect for letting another tool generate a workout and hand it straight to the rider.
Say a training app like VertMatch works out that you need a
threshold session today. Instead of asking you to copy anything, it builds
an indoorbike.app/editor/ link with the workout baked in. You
open it, see the workout on the timeline, tweak it if you like, then send it
to your phone the usual way - Show QR & link or
Share to phone - and ride it.
Try it
Open this link - the editor loads a 3×8 threshold workout:
https://indoorbike.app/editor/?v=1&name=Threshold+3x8&ftp=250&s=10m@50,3x(8m@100;4m@55),5m@50The basics
Everything is in the query string of https://indoorbike.app/editor/.
Only s (the segments) is required; the rest are optional.
| Param | What it does |
|---|---|
s required | The workout segments. See the syntax below. |
name | Workout title. |
desc | Short description. |
tags | Comma-separated labels, e.g. Threshold,Sweet Spot. |
ftp | Rider FTP in watts (50–600). Just makes the watt preview accurate; the workout itself stays in % FTP. |
v | API version. Use 1. |
Encode values the normal way: spaces become + or %20.
The segment characters @ , ; ( ) x are URL-safe - leave them as-is.
Segment syntax
The s value is a comma-separated list. Each item is one of:
DURATION@POWEROne segment - e.g. 5m@90, 300@90, 30s@120.
Nx(SEG;SEG)Repeat a group N times - e.g. 3x(8m@100;4m@55).
NxSEGRepeat one segment N times - e.g. 8x30s@120.
- Duration - a number in seconds (
300,90s), or minutes with anm(5m,2.5m). - Power - a percentage of FTP (
100= your threshold). - Inside a repeat group, separate segments with
;(commas separate the top-level list).
More examples
Sweet spot - 4×10 min @ 90%
https://indoorbike.app/editor/?name=Sweet+Spot+4x10&ftp=230&s=10m@55,4x(10m@90;5m@60),8m@50VO2 max - 6×3 min @ 115%
https://indoorbike.app/editor/?name=VO2+6x3&tags=VO2+Max&s=12m@55,6x(3m@115;3m@50),8m@50Sprints - 8×30 s @ 130%
https://indoorbike.app/editor/?name=Sprints&s=10m@50,8x30s@130,5m@50Badges (optional)
Want a ready-made "Open in Indoor Bike" badge to drop next to a workout your app generates? There's a small set of SVG badges - filled, outline, and compact chip, in two sizes and four wordings - with copy-paste embed code and downloads.
These assets are completely optional and free to use. You never need a badge (or our permission) to link to the editor - a plain text link works perfectly. They're just there if you'd like a polished, on-brand button. Use encouraged, never required.
Privacy
The editor has no server, no database, and no account. Your workout lives in the URL and is read entirely by JavaScript in your browser - nothing is uploaded to us, and there's nothing for us to store. Your in-progress workout is kept only in your own browser so it survives a refresh. Full detail is in the privacy policy.
One thing to keep in mind: because the workout is part of the link, treat a generated URL like any shareable link, and don't put anything sensitive in the name or description.
For LLMs & full reference
Generating links with a model? Point it at the machine-readable spec - it has the complete grammar, limits, and examples in one fetchable file:
The technical documentation covers the parts this page skips: validation and limits (segment cap, clamping, error handling), how the API relates to the QR / share hash format, the exact workout JSON model, and versioning.