Developers · Editor URL API · v1

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@50

The basics

Everything is in the query string of https://indoorbike.app/editor/. Only s (the segments) is required; the rest are optional.

ParamWhat it does
s requiredThe workout segments. See the syntax below.
nameWorkout title.
descShort description.
tagsComma-separated labels, e.g. Threshold,Sweet Spot.
ftpRider FTP in watts (50–600). Just makes the watt preview accurate; the workout itself stays in % FTP.
vAPI 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.

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@50

VO2 max - 6×3 min @ 115%

https://indoorbike.app/editor/?name=VO2+6x3&tags=VO2+Max&s=12m@55,6x(3m@115;3m@50),8m@50

Sprints - 8×30 s @ 130%

https://indoorbike.app/editor/?name=Sprints&s=10m@50,8x30s@130,5m@50

Badges (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.

Browse the badges

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.