Developers / Field reference

Everything you can send to SyncroFit

Every option a partner app can put in a workout handoff — the full set of circuit and exercise fields, their types, defaults, and allowed values. Send as many or as few as you like; only a handful are required.

This page is generated from the integration contract (v2, updated 2026-07-23) — the same machine-readable file the iOS app is verified against, so it can never drift from what SyncroFit actually accepts. Fetch that JSON directly if you want to validate against it in your build.

Circuit fields

The top-level workout object (PartnerJSONCircuit). A circuit needs a name and at least one exercise; everything else is optional.

FieldTypeDescription
idrecommendedstring?the partner's OWN circuit id. Echoed back verbatim as circuit.id on every webhook event. Send your share token / routine id so feedback correlates.
namerequiredstringNo additional description
descriptionstring?No additional description
from{ name: string, organization: string }?creator attribution
restBetweenExercisesint?seconds between exercises
webhookrecommendedstring? HTTPSSyncroFit POSTs import/completion events to THIS url. Per-circuit, not global. REQUIRED for any feedback to flow. Gated by the user's Share-with-partners consent.
modestring?intervals | forTime | amrap | emom (default: intervals)
amrapMinutesint?AMRAP cap, default 12, clamped 1..60 (only when mode=amrap)
emomMinutesint?EMOM cap, default 12, clamped 1..60 (only when mode=emom)
setOrderstring?circuit | straightSets (default: circuit). circuit = interleave one set of each exercise per round, then repeat (classic circuit training, current default behavior). straightSets = finish all sets of exercise 1, then all sets of exercise 2, etc. Only meaningful when every exercise's mode is intervals (or omitted) — mixed-mode circuits (any forTime/amrap/emom present) always run sequentially regardless of this field.
exercisesrequiredPartnerJSONExercise[]No additional description

Exercise fields

Each entry in a circuit's exercises array (PartnerJSONExercise).

FieldTypeDescription
namerequiredstringNo additional description
notesstring?No additional description
setsrequiredintNo additional description
repsrequiredintNo additional description
actionTimerequiredintseconds of work per rep
restTimerequiredintseconds rest between reps within a set (ignored when reps==1)
betweenSetRestint?extra rest after each set (default 0)
actionImageURLstring? HTTPS jpg/png/gifwork-phase background, downloaded on import, <=10MB
restImageURLstring? HTTPSrest/between-set background
coachVoiceURLstring? HTTPS m4a/mp3plays when the exercise becomes active, <=10MB
requiredEquipmentstring[]?gates SyncroFit's /workouts equipment filter. Use equipmentTaxonomy values.
optionalEquipmentstring[]?nice-to-have; surfaced but never gates the filter
modestring?per-exercise mode override (default: intervals)

Equipment values

The canonical names for requiredEquipment and optionalEquipment. Map your app's equipment to these so a workout is found by SyncroFit's /workouts equipment filter.

  • No equipment
  • Dumbbells
  • Kettlebell
  • Barbell
  • Resistance bands
  • Pull-up bar
  • Yoga mat
  • Bench
  • Stability ball
  • Medicine ball
  • Jump rope
  • Foam roller
  • TRX / suspension
  • Boxing gloves
  • Treadmill
  • Stationary bike
  • Rowing machine

Link formats

How the circuit reaches SyncroFit. All resolve to the same parser — the first two (a URL-encoded circuit) are preferred.

run-scheme-jsonpreferred
syncrofit://run?circuit=<urlencoded PartnerJSONCircuit>
run-universal-jsonpreferred
https://www.mysyncrofit.com/run?circuit=<urlencoded PartnerJSONCircuit>
run-inline-params
syncrofit://run?name=&action=&rest=&sets=&reps=&actionImage=&coachVoice=&id=&webhook=

minimal, no JSON

run-remote
syncrofit://run?from=https://partner.example/circuit.json

SyncroFit fetches the PartnerJSONCircuit from this URL

legacy-importdeprecated
intervaltimer://import-circuit?data=<base64 GroupShareCodec>

app-to-app share; does NOT carry a webhook — no feedback. Prefer run-scheme-json.

Building the handoff

This page is the field catalog. For worked examples of assembling a link, the webhook payloads, and the import-dedup rules, see the developer guide →