X-API-Key header. See API Reference for authentication details.
List Devices
Discover the device and OS permutations that can be requested for cloud runs.GET
/api/v1/devices — Returns 200 OKplatform (android or ios) and physical
(true or false). Each model appears once with its supported os_versions.
os_versions. For iOS simulators,
fast_os_versions identifies choices with an optimized startup path. Every
returned combination is supported.
Run Flows
Trigger flow execution. Returns abatch_id to poll via Run Status and a batch_url to view or share the entire batch in the dashboard.
POST
/api/v1/flows/run — Returns 200 OKRequest Body
string
App bundle identifier (mobile). Required if
app_id is not provided.string
ios or android. Required with bundle_id.string
Web app identifier. Required if
bundle_id is not provided.string
Optional. Pin the run to a specific build (UUID) instead of the app’s active build — useful for testing a particular CI/CD build. The build must belong to the resolved app, otherwise the request returns
404.string[]
Suite UUIDs to run. At least one of
suite_ids or flow_ids is required.boolean
Optional suite execution override. Explicit
true or false takes precedence
over each suite’s saved Run flows in parallel setting. Omit it or send
null to use the saved suite setting.string[]
Flow UUIDs to run. At least one of
suite_ids, flow_ids, or labels is required.When provided, suite auth instructions and suite-scoped variables are resolved automatically unless resolve_suite_context is set to false. See Suite context for individual flows below.string[]
Label names to run (e.g.
["smoke", "checkout"]). Runs the union of the suites and flows carrying any of these labels; a flow already covered by a matched suite runs once. Returns 400 if nothing matches. See Run by Label.boolean
default:"true"
When running individual flows via
flow_ids, whether to look up the flow’s suite and run auth instructions first. Defaults to true. Set to false to run the flow without suite auth or suite-scoped variables — useful for unauthenticated smoke tests or flows that handle login themselves.object
Optional. When a flow belongs to multiple suites, pass a JSON object mapping each ambiguous
flow_id to the suite_id whose auth instructions and variables should be used, e.g. {"<flow_id>": "<suite_id>"}. Ignored when resolve_suite_context is false.string | object
Key-value variables to attach to the build being run (the pinned
app_build_id if provided, otherwise the active build) and inject into flow instructions via ${env:KEY}. Accepts a string ("KEY1=VALUE1,KEY2=VALUE2") or a JSON object ({"KEY1": "VALUE1"}). See Build Variables.string
For web apps: which browser to run the flow in. One of:
chrome— real Google Chrome (default). Includes proprietary codecs (H.264, AAC) and Widevine DRM. Use this unless you have a specific reason to pick another browser.chromium— open-source Chromium. No proprietary codecs, no DRM, deterministic and vendor-neutral.firefox— Mozilla Firefox stable.edge— Microsoft Edge stable.
Chrome / Google Chrome → chrome; msedge / Microsoft Edge → edge. Ignored for mobile runs.array
Optional for web apps. Override the app’s default Chrome extensions for this
run. Each entry can be an extension app UUID or an object that pins an exact
build:Omit this field to inherit the web app’s attached defaults. Pass
[] to run
without extensions. When extensions load, chrome, edge, and chromium
run in Chromium; firefox is rejected because Chrome extensions are not
supported there.object
Optional for mobile apps. Selects the execution target and, when specified,
the exact supported device permutation. Fields are
physical (defaults to
false), model (for example,
"Pixel 10 Pro"), and os_version (for example, "17"). Set model or
os_version to "latest" to explicitly request rolling resolution for that
field. This lets you pin one while keeping the other current. Use
List Devices to discover valid combinations. Omit it to use
the recommended default. A request with no supported match fails fast with a
clear error. For an iOS simulator, use physical: false with a listed iPhone
or iPad model and iOS version. For a real iOS device, use physical: true
and an .ipa build.object[]
Required instead of See Multi-Device Testing for a complete setup and
execution guide.
device for a two-device flow. Pass exactly two entries
in Device 1, Device 2 order. Both entries must select virtual devices
(physical: false) or both must select real devices (physical: true). Model
and OS can be exact, "latest", or omitted for rolling resolution. Both
devices use the run’s app build and platform.Suite context for individual flows
When you trigger a single flow viaflow_ids, Autosana resolves the suite it belongs to and runs that suite’s Auth Instructions first — the same behavior as running the flow manually from the dashboard.
Example Request
Example: Run with Chrome extensions
400.
Example Response
Run Status
Poll execution status for a batch triggered by Run Flows.GET
/api/v1/runs/status — Returns 200 OKQuery Parameters
string
required
The
batch_id from /api/v1/flows/run.Example Request
Example Response
status: common values includecreating,pending,queued,running,reviewing,verifying,terminating,terminated,passed,failed,error, andskipped. Treat this list as non-exhaustive. Poll until a terminal status rather than switching on every value.source: how it was triggered (ci,dashboard,schedule, ormcp)actor: who triggered it, as{ id, name, type }, wheretypeisuser,system, orapi_keydependency_app_build_ids: exact Chrome extension build UUIDs loaded for the group
type is api_key, id is the key’s ID, and name is the key’s name from your dashboard. source and actor may be null for older runs.
Get Run Results
Get full details of a run, including metadata, summary, the raw run recording URL, and all actions with screenshot URLs. Use theid from individual runs in the Run Status response.
GET
/api/v1/runs/{run_id} — Returns 200 OKPath Parameters
string
required
UUID of the run. Available in the
runs[].id field from Run Status.Example Request
Example Response
Artifact URLs
string[]
Exact Chrome extension build UUIDs loaded for this run.
object[]
Per-device metadata and artifact URLs for a two-device run, ordered by
device_index. Each entry includes model and OS metadata and that
device’s recording, performance, device-log, and network-log URLs.
Single-device runs return an empty array and continue to use the top-level
artifact fields below.string | null
Public URL for the raw, unannotated MP4 recording of the run.
null when the run did not produce a recording.string | null
Time-series performance metrics (memory, CPU, web vitals) as JSON.
string | null
Device log (Android
logcat / iOS syslog) or browser console log (web), as plain text or JSONL.string | null
HTTP requests captured during the run, as JSONL — one entry per request with
method, url, status, resource_type, duration_ms, response_size, etc. Failed requests (DNS, abort, CORS) appear with status: 0 and an error string.Produced for web and iOS runs (iOS from the cloud simulator; apps that pin their TLS certificate aren’t captured). null when no traffic was captured. See Network Traffic.null if the artifact wasn’t produced for that run.
Actions from a two-device run include device_index (1 or 2).
Terminate Run
Terminate an in-progress flow group run.run_id may be a flow group run ID from Run Flows (flow_group_run_ids) or a flow run ID from Run Status / Get Run Results.
POST
/api/v1/runs/terminate returns 200 OKRequest Body
string
required
UUID of a flow group run or a flow run.
terminating. Already-terminal runs return action: "none". Unknown or other-organization IDs return 404.
To watch termination finish, reuse the batch_id from Run Flows and poll Run Status until that group’s status is terminal (terminated, skipped, passed, failed, or error). The terminate response does not include batch_id. You can also poll Get Run Results with the original flow run ID until that flow reaches any terminal status. Children that never started may be skipped rather than terminated.
Example Request
run_id and the resolved parent group in flow_group_run_id.
Example Response
string
The
run_id you sent (flow group run or flow run).string
The parent group that was actually terminated. Same as
run_id when you passed a group ID.string
Current group status after the request. Typically
terminated or terminating. When action is none, this is the group’s existing terminal status (passed, failed, error, terminated, or skipped).string
Human-readable outcome, for example
"Marked for termination (worker will finalize)" or "Already in terminal state".string
terminated (pending run stopped immediately), terminating (worker will finalize), or none (already terminal).Polling
Poll/api/v1/runs/status every 10-15 seconds until is_complete is true.