Skip to content

VacuPump API V1

The VacuPump API is hosted on multiple clusters around the world. When a device goes online it will connect to the lowest latency server. To control the device you must connect to the same cluster as the device. You can find the cluster your device is connected to by checking the cluster property in the /vacupump/connected response.

https://us-east-1.autoblowapi.com
https://us-east-2.autoblowapi.com
https://us-west-1.autoblowapi.com
https://us-west-2.autoblowapi.com
https://ca-central-1.autoblowapi.com
https://ap-southeast-2.autoblowapi.com
https://eu-west-2.autoblowapi.com
https://eu-central-1.autoblowapi.com

Every request below takes the device token in the x-device-token header. Requests with a body use Content-Type: application/json unless noted otherwise. Unless noted otherwise, a successful command responds with the device state.

Check if a device is connected and get the cluster it is connected to. This request can be performed on any cluster but for reliability purposes we recommend using https://latency.autoblowapi.com which will connect you to the cluster with the lowest latency. All the other requests can only be performed on the cluster the device is connected to.

{ "connected": true, "cluster": "eu-central-1.autoblowapi.com", "deviceType": "vacupump" }

Get the firmware and hardware version, the device MAC and the capabilities the firmware advertised when it connected. Video sync is only available when the capabilities array contains { "key": "sync_script", "value": "1" } (firmware 1.01 or newer).

{
"firmwareStatus": "UP_TO_DATE",
"firmwareVersion": 1.01,
"firmwareBranch": "prod",
"hardwareVersion": "vacupump",
"mac": "aa:bb:cc:dd:ee:ff",
"deviceType": "vacupump",
"helloReceived": true,
"capabilities": [{ "key": "sync_script", "value": "1" }]
}

Get the current device state.

Enable or disable periodic state-updated events on the event stream.

namerequiredtypedescription
enabled
(body)
yesboolWhether to stream state updates

Responds with { "success": true }.

Vacuum values are in kPa and negative, from -60 to 0.

namerequiredtypedescription
targetVacuumKpa
(body)
yesnumberTarget vacuum in kPa (-60 to 0)

Start holding the manual target vacuum. No body.

Release the vacuum and return to idle. No body.

namerequiredtypedescription
pumpVacuumKpa
(body)
yesnumberVacuum during the pump phase (-60 to 0)
restVacuumKpa
(body)
yesnumberVacuum during the rest phase (-60 to 0)
holdPumpMs
(body)
yesnumberPump phase duration in ms (0 to 600000)
holdRestMs
(body)
yesnumberRest phase duration in ms (0 to 600000)

PUT /vacupump/pulse/start, /vacupump/pulse/pause, /vacupump/pulse/stop

Section titled “PUT /vacupump/pulse/start, /vacupump/pulse/pause, /vacupump/pulse/stop”

Start, pause or stop pulsing with the configured values. No body.

namerequiredtypedescription
vacuumTargetKpa
(body)
yesnumberVacuum target in kPa (-60 to 0)
pressureTargetKpa
(body)
yesnumberPressure target in kPa (-60 to 60)
speedPct
(body)
nonumberStroke speed in percent (10 to 100)

PUT /vacupump/stroke/start, /vacupump/stroke/pause, /vacupump/stroke/stop

Section titled “PUT /vacupump/stroke/start, /vacupump/stroke/pause, /vacupump/stroke/stop”

Start, pause or stop stroking with the configured values. No body.

Workouts are stored on the device in 10 slots.

Responds with { "items": [{ "slotIndex", "exists", "workoutUuid", "name", "description", "durationMs", "exerciseCount" }], "totalSlots": 10 }.

Downloads a workout from the Autoblow library into a slot. The request resolves once the device finished downloading, which can take several seconds.

namerequiredtypedescription
toSlotIndex
(body)
yesnumberDestination slot (1 to 10)
workoutUuid
(body)
yesstringWorkout UUID

Responds with { "success": true }.

namerequiredtypedescription
slot
(body)
yesnumberSlot to play (1-10)

PUT /vacupump/workout/pause, /vacupump/workout/resume

Section titled “PUT /vacupump/workout/pause, /vacupump/workout/resume”

Pause or resume the running workout. No body.

PUT /vacupump/workout/move, /vacupump/workout/delete

Section titled “PUT /vacupump/workout/move, /vacupump/workout/delete”

Reorder (fromSlotIndex, toSlotIndex) or delete (slotIndex) a slot. Both respond with the workout list.

Sync scripts play a video-synchronised sequence of pressure exercises on the device. Unlike the Ultra and Vacuglide, the VacuPump does not play funscripts: a VacuPump sync script is a list of consecutive HOLD, PULSE, STROKE and REST exercises whose start times are the sum of the preceding durations. The firmware documentation calls these sections, which is why the device state reports syncScriptSectionIndex and syncScriptSectionCount.

Video sync requires firmware 1.01 or newer. Check the sync_script capability in /vacupump/info or call /vacupump/sync-script/supported; on older firmware every sync request fails with a 400 validation error.

Scripts are sent to the API as JSON exercises (below). The backend compiles them into the plain-text file the device downloads, shown here for reference. The first line is a header with the format version, the exercise count and the total duration in milliseconds; both must match the exercises exactly. Vacuum is negative kPa.

VACUPUMP_SYNC,1,4,150000
HOLD,30000,-10
PULSE,60000,-10,3000,-30,3000
STROKE,30000,-20,5,40
REST,30000
linedescription
HOLD,duration_ms,vacuum_kpaHold a vacuum target
PULSE,duration_ms,first_kpa,first_ms,second_kpa,second_msAlternate between two vacuum targets; each phase lasts 30 to 600000 ms
STROKE,duration_ms,vacuum_kpa,pressure_kpa,speed_pctStroke between vacuum and pressure targets at 10 to 100 percent speed
REST,duration_msRelease the vacuum

Limits: at most 1,000 exercises, 128 KiB, 24 hours in total, durations above 0, vacuum -60 to 0 kPa, stroke pressure -60 to 60 kPa and at least 0.1 kPa above its vacuum target. Out-of-range values are rejected, not clamped.

The JSON form of the same script, as sent to /vacupump/sync-script/upload-exercises:

[
{ "type": "HOLD", "durationMs": 30000, "vacuumKpa": -10 },
{ "type": "PULSE", "durationMs": 60000, "pulse1Kpa": -10, "pulse1Ms": 3000, "pulse2Kpa": -30, "pulse2Ms": 3000 },
{ "type": "STROKE", "durationMs": 30000, "vacuumTargetKpa": -20, "pressureTargetKpa": 5, "speedPct": 40 },
{ "type": "REST", "durationMs": 30000 }
]

Responds with { "supported": true } when the connected firmware can play sync scripts.

Loads a previously uploaded script by token. The device downloads, validates and installs the script before responding, so allow a request timeout of at least 60 seconds. Loading never starts playback; the device ends in SYNC_PAUSED with the position at zero.

namerequiredtypedescription
scriptToken
(body)
yesstringToken returned by an upload ([A-Za-z0-9_-])
Terminal window
curl --request PUT \
--url https://eu-central-1.autoblowapi.com/vacupump/sync-script/load-token \
--header 'Content-Type: application/json' \
--header 'x-device-token: ctpos6zzurib' \
--data '{"scriptToken": "7a93bfc5-4043-4ade-aee5-bec8012b0e12"}'

PUT /vacupump/sync-script/upload-exercises

Section titled “PUT /vacupump/sync-script/upload-exercises”

Stores the exercises under a new token and loads them on the device. The token is returned in the syncScriptToken field of the device state and stays valid for 9 days.

namerequiredtypedescription
exercises
(body)
yesarray1 to 1,000 exercise objects (see script format)

Starts, resumes or seeks to a video position. Send it whenever the video starts playing or the user seeks, and feel free to re-send the current position to correct drift: a start within 1 s of the position the device is already at is treated as a clock correction and keeps an in-progress stroke cycle, while any other start re-enters its exercise. A start at or beyond the script duration completes immediately and releases the vacuum.

namerequiredtypedescription
startTimeMs
(body)
yesnumberVideo position in ms
Terminal window
curl --request PUT \
--url https://eu-central-1.autoblowapi.com/vacupump/sync-script/start \
--header 'Content-Type: application/json' \
--header 'x-device-token: ctpos6zzurib' \
--data '{"startTimeMs": 24000}'

Pauses playback: freezes the position and releases the vacuum. The script stays loaded, so a later start resumes or seeks without downloading again. No body.

namerequiredtypedescription
offsetTimeMs
(body)
yesnumber-10000 to 10000 ms; positive means the device runs ahead of the video

Returns the stored script: { "token", "durationMs", "exerciseCount", "exercises": [...] }. Responds 404 when the token is unknown or expired.

GET /vacupump/settings, PUT /vacupump/settings

Section titled “GET /vacupump/settings, PUT /vacupump/settings”
namerequiredtypedescription
units
(body)
yesnumber0 imperial, 1 metric
lcdBrightnessLevel
(body)
yesnumberDisplay brightness (1 to 10)

Wi-Fi, motor and storage diagnostics reported by the device.

Storage totals in bytes: { "totalBytes", "usedBytes", "availableBytes" }.

GET /vacupump/firmware/update-info, PUT /vacupump/firmware/update-start

Section titled “GET /vacupump/firmware/update-info, PUT /vacupump/firmware/update-start”

Read the available firmware version or start an over-the-air update. The device restarts after a successful update.

Server-sent events. After enabling /vacupump/state-updates the device emits state-updated events whose payload.data.state is the device state. While a sync script plays, syncScriptPositionMs and syncScriptSectionIndex advance with the video.

nametypedescription
operationalModeenum: IDLE, MANUAL, WORKOUTS, WORKOUTS_PAUSED, PULSE, PULSE_PAUSED, STROKE, STROKE_PAUSED, SYNC_PLAYING, SYNC_PAUSED, EMERGENCY_STOP, FIRMWARE_UPDATINGThe current operational mode
targetVacuumKpanumberTarget vacuum in kPa
currentVacuumKpanumberMeasured vacuum in kPa
manualElapsedMsnumberTime spent in manual mode
pulsePumpVacuumKpa, pulseRestVacuumKpa, pulseHoldPumpMs, pulseHoldRestMs, pulseDirection, pulseTimerMsnumber / boolPulse configuration and phase
strokeVacuumTargetKpa, strokePressureTargetKpa, strokeSpeedPct, strokeDirectionnumber / boolStroke configuration and direction
workoutId, workoutExerciseIndex, workoutExerciseElapsedMs, workoutExerciseRemainingMs, workoutElapsedMs, workoutRemainingMsnumberRunning workout progress
syncScriptTokenstringToken of the loaded sync script
syncScriptLoadedboolWhether a sync script is installed
syncScriptPositionMsnumberCurrent video position of the script
syncScriptDurationMsnumberTotal script duration
syncScriptSectionIndexnumberZero-based active exercise; equal to syncScriptSectionCount when finished
syncScriptSectionCountnumberNumber of exercises in the script
syncScriptOffsetMsnumberApplied sync offset in ms

Requests are limited per device token. A 429 response means the limit was hit; wait before retrying.