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.