Skip to main content
All requests require an API key in the 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 OK
Optional query parameters are platform (android or ios) and physical (true or false). Each model appears once with its supported os_versions.
Example response (abbreviated):
Choose a model and one of its 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 a batch_id to poll via Run Status.
POST /api/v1/flows/run — Returns 200 OK

Request 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.
Aliases accepted: Chrome / Google Chromechrome; msedge / Microsoft Edgeedge. 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.
For example, keep the model and OS current on every run:

Suite context for individual flows

When you trigger a single flow via flow_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.
If a flow belongs to multiple suites, the request returns 400 unless you pass suite_overrides mapping that flow to one of its suite UUIDs, e.g. {"660e8400-e29b-41d4-a716-446655440001": "550e8400-e29b-41d4-a716-446655440000"}.

Example Request

Example: Run with Chrome extensions

All dependency apps and pinned builds must belong to the same organization as the primary web app. Duplicate app IDs are loaded once; conflicting build pins return 400.

Example Response


Run Status

Poll execution status for a batch triggered by Run Flows.
GET /api/v1/runs/status — Returns 200 OK

Query Parameters

string
required
The batch_id from /api/v1/flows/run.

Example Request

Example Response

Each run group also includes:
  • source: how it was triggered (ci, dashboard, schedule, or mcp)
  • actor: who triggered it, as { id, name, type }, where type is user, system, or api_key
  • dependency_app_build_ids: exact Chrome extension build UUIDs loaded for the group
Runs triggered with an API key (this endpoint, MCP, CI) are attributed to the key itself: 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 the id from individual runs in the Run Status response.
GET /api/v1/runs/{run_id} — Returns 200 OK

Path 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.
Any of these may be 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.