VacuPump API V1
Selecting A Cluster
Section titled “Selecting A Cluster”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.comhttps://us-east-2.autoblowapi.comhttps://us-west-1.autoblowapi.comhttps://us-west-2.autoblowapi.comhttps://ca-central-1.autoblowapi.comhttps://ap-southeast-2.autoblowapi.comhttps://eu-west-2.autoblowapi.comhttps://eu-central-1.autoblowapi.comEvery 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.
Basic Requests
Section titled “Basic Requests”GET /vacupump/connected
Section titled “GET /vacupump/connected”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 /vacupump/info
Section titled “GET /vacupump/info”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 /vacupump/state
Section titled “GET /vacupump/state”Get the current device state.
PUT /vacupump/state-updates
Section titled “PUT /vacupump/state-updates”Enable or disable periodic state-updated events on the event stream.
| name | required | type | description |
|---|---|---|---|
| enabled (body) | yes | bool | Whether to stream state updates |
Responds with { "success": true }.
Manual Commands
Section titled “Manual Commands”Vacuum values are in kPa and negative, from -60 to 0.
PUT /vacupump/manual/target
Section titled “PUT /vacupump/manual/target”| name | required | type | description |
|---|---|---|---|
| targetVacuumKpa (body) | yes | number | Target vacuum in kPa (-60 to 0) |
PUT /vacupump/manual/start
Section titled “PUT /vacupump/manual/start”Start holding the manual target vacuum. No body.
PUT /vacupump/manual/stop
Section titled “PUT /vacupump/manual/stop”Release the vacuum and return to idle. No body.
Pulse Commands
Section titled “Pulse Commands”PUT /vacupump/pulse/config
Section titled “PUT /vacupump/pulse/config”| name | required | type | description |
|---|---|---|---|
| pumpVacuumKpa (body) | yes | number | Vacuum during the pump phase (-60 to 0) |
| restVacuumKpa (body) | yes | number | Vacuum during the rest phase (-60 to 0) |
| holdPumpMs (body) | yes | number | Pump phase duration in ms (0 to 600000) |
| holdRestMs (body) | yes | number | Rest 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.
Stroke Commands
Section titled “Stroke Commands”PUT /vacupump/stroke/config
Section titled “PUT /vacupump/stroke/config”| name | required | type | description |
|---|---|---|---|
| vacuumTargetKpa (body) | yes | number | Vacuum target in kPa (-60 to 0) |
| pressureTargetKpa (body) | yes | number | Pressure target in kPa (-60 to 60) |
| speedPct (body) | no | number | Stroke 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.
Workout Commands
Section titled “Workout Commands”Workouts are stored on the device in 10 slots.
GET /vacupump/workout/list
Section titled “GET /vacupump/workout/list”Responds with { "items": [{ "slotIndex", "exists", "workoutUuid", "name", "description", "durationMs", "exerciseCount" }], "totalSlots": 10 }.
PUT /vacupump/workout/download
Section titled “PUT /vacupump/workout/download”Downloads a workout from the Autoblow library into a slot. The request resolves once the device finished downloading, which can take several seconds.
| name | required | type | description |
|---|---|---|---|
| toSlotIndex (body) | yes | number | Destination slot (1 to 10) |
| workoutUuid (body) | yes | string | Workout UUID |
Responds with { "success": true }.
PUT /vacupump/workout/start
Section titled “PUT /vacupump/workout/start”| name | required | type | description |
|---|---|---|---|
| slot (body) | yes | number | Slot 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 Script Commands
Section titled “Sync Script Commands”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.
Script format
Section titled “Script format”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,150000HOLD,30000,-10PULSE,60000,-10,3000,-30,3000STROKE,30000,-20,5,40REST,30000| line | description |
|---|---|
HOLD,duration_ms,vacuum_kpa | Hold a vacuum target |
PULSE,duration_ms,first_kpa,first_ms,second_kpa,second_ms | Alternate between two vacuum targets; each phase lasts 30 to 600000 ms |
STROKE,duration_ms,vacuum_kpa,pressure_kpa,speed_pct | Stroke between vacuum and pressure targets at 10 to 100 percent speed |
REST,duration_ms | Release 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 }]GET /vacupump/sync-script/supported
Section titled “GET /vacupump/sync-script/supported”Responds with { "supported": true } when the connected firmware can play sync scripts.
PUT /vacupump/sync-script/load-token
Section titled “PUT /vacupump/sync-script/load-token”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.
| name | required | type | description |
|---|---|---|---|
| scriptToken (body) | yes | string | Token returned by an upload ([A-Za-z0-9_-]) |
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.
| name | required | type | description |
|---|---|---|---|
| exercises (body) | yes | array | 1 to 1,000 exercise objects (see script format) |
PUT /vacupump/sync-script/start
Section titled “PUT /vacupump/sync-script/start”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.
| name | required | type | description |
|---|---|---|---|
| startTimeMs (body) | yes | number | Video position in ms |
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}'PUT /vacupump/sync-script/stop
Section titled “PUT /vacupump/sync-script/stop”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.
PUT /vacupump/sync-script/offset
Section titled “PUT /vacupump/sync-script/offset”| name | required | type | description |
|---|---|---|---|
| offsetTimeMs (body) | yes | number | -10000 to 10000 ms; positive means the device runs ahead of the video |
GET /vacupump/sync-script/info/:token
Section titled “GET /vacupump/sync-script/info/:token”Returns the stored script: { "token", "durationMs", "exerciseCount", "exercises": [...] }. Responds 404 when the token is unknown or expired.
Settings
Section titled “Settings”GET /vacupump/settings, PUT /vacupump/settings
Section titled “GET /vacupump/settings, PUT /vacupump/settings”| name | required | type | description |
|---|---|---|---|
| units (body) | yes | number | 0 imperial, 1 metric |
| lcdBrightnessLevel (body) | yes | number | Display brightness (1 to 10) |
Diagnostics And Firmware
Section titled “Diagnostics And Firmware”GET /vacupump/diagnostics
Section titled “GET /vacupump/diagnostics”Wi-Fi, motor and storage diagnostics reported by the device.
GET /vacupump/spiffs/info
Section titled “GET /vacupump/spiffs/info”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.
Device Events
Section titled “Device Events”GET /events/stream?deviceToken=...
Section titled “GET /events/stream?deviceToken=...”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.
Device State
Section titled “Device State”| name | type | description |
|---|---|---|
| operationalMode | enum: IDLE, MANUAL, WORKOUTS, WORKOUTS_PAUSED, PULSE, PULSE_PAUSED, STROKE, STROKE_PAUSED, SYNC_PLAYING, SYNC_PAUSED, EMERGENCY_STOP, FIRMWARE_UPDATING | The current operational mode |
| targetVacuumKpa | number | Target vacuum in kPa |
| currentVacuumKpa | number | Measured vacuum in kPa |
| manualElapsedMs | number | Time spent in manual mode |
| pulsePumpVacuumKpa, pulseRestVacuumKpa, pulseHoldPumpMs, pulseHoldRestMs, pulseDirection, pulseTimerMs | number / bool | Pulse configuration and phase |
| strokeVacuumTargetKpa, strokePressureTargetKpa, strokeSpeedPct, strokeDirection | number / bool | Stroke configuration and direction |
| workoutId, workoutExerciseIndex, workoutExerciseElapsedMs, workoutExerciseRemainingMs, workoutElapsedMs, workoutRemainingMs | number | Running workout progress |
| syncScriptToken | string | Token of the loaded sync script |
| syncScriptLoaded | bool | Whether a sync script is installed |
| syncScriptPositionMs | number | Current video position of the script |
| syncScriptDurationMs | number | Total script duration |
| syncScriptSectionIndex | number | Zero-based active exercise; equal to syncScriptSectionCount when finished |
| syncScriptSectionCount | number | Number of exercises in the script |
| syncScriptOffsetMs | number | Applied sync offset in ms |
Rate Limiting
Section titled “Rate Limiting”Requests are limited per device token. A 429 response means the limit was hit; wait before retrying.