Anatomy of a flow
A flow is a sequence of steps executed on a device, with optional branching on device state or API responses. Every input step routes through human input synthesis, so you never need to add randomness yourself — adding your own jitter on top actually makes the distribution less human, not more.
Step types
- Interaction — tap, swipe, type, long-press, scroll. Pressure, contact area and travel curves are synthesised.
- Vision — wait for an element, assert text present, OCR a region. Resolution-independent.
- Media — inject an image or video through the camera with correct EXIF for the device and location.
- Control — branch, loop, wait, random-choice-weighted, abort.
- External — HTTP request, webhook emit, read from a sheet or database.
Rate guardrails
Every flow inherits the guardrails for the network it targets. If a flow would exceed the daily action limit for the account's age, the step blocks rather than executing. This is on by default and we strongly recommend leaving it on — it exists because the most common cause of account loss is an operator scaling a flow faster than the platform tolerates.
Scheduling
POST /v1/flows/flw_2c91/schedule
{
"devices": ["grp_uk_snap"],
"cron": "0 9,14,20 * * *",
"jitter_minutes": 90,
"timezone": "device"
}Setting timezone: "device" runs the flow in each device's own local time, not yours. With 90 minutes of jitter, a fleet of 200 devices posting "at 9 am" spreads across a believable window instead of firing simultaneously.