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.
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.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
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.
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.
Polling
Poll/api/v1/runs/status every 10-15 seconds until is_complete is true.