Using AisleRun
Reading results
Poll the run, read its event stream, and open the report with recordings, screenshots and traces.
Reading a run is free. Every read needs the run's read token, which comes back in the paid response. There are three views of the same run: its status, its event stream, and the full report.
The read token
The token is read_token in the paid response. Send it as a bearer token.
Authorization: Bearer rt_…
The same token is in report_url after the #, so the browser keeps it to itself and it never reaches a server log. Retrying the same paid request returns the same token, which is why a lost response isn't a lost run.
Status
curl -H "Authorization: Bearer rt_…" https://aislerun.158-220-85-120.sslip.io/v1/inspections/{id}
| Field | Meaning |
|---|---|
status |
Where the run is. See How a run works |
terminal |
true once the run won't change again |
overall_verdict |
PASS, FAIL or INCONCLUSIVE once terminal, otherwise null |
viewports |
Each viewport's verdict, blocker and attempt count |
last_event |
The most recent thing the worker recorded |
elapsed_ms |
Time since the worker started |
poll_after_ms |
2000 until terminal |
Our paid runs finished 7 to 19 seconds after settlement. Two seconds between polls matches that.
Events
The event stream is what the worker wrote down as it went, in order. Use the cursor to read only what's new.
curl -H "Authorization: Bearer rt_…" \
"https://aislerun.158-220-85-120.sslip.io/v1/inspections/{id}/events?after=14"
{ "events": [
{ "seq": 15, "type": "step_started", "details": { "viewport": "mobile", "step": "confirm_cart" } },
{ "seq": 16, "type": "step_finished", "details": { "viewport": "mobile", "step": "confirm_cart",
"observed": "Add to cart was clicked but the cart did not change." } },
{ "seq": 17, "type": "retrying", "details": { "viewport": "mobile",
"cause_effect": "Click Add to cart → cart state unchanged → retrying once" } } ],
"next_cursor": 17 }
The report
GET /v1/reports/{id} returns the whole run once it's finished.
| Part | What's in it |
|---|---|
viewports[].steps |
Each step's expected outcome, what was observed, the result, timings, and its offset into the recording |
viewports[].recording |
The recording of the final attempt, with a poster image |
viewports[].artifacts |
Every screenshot, recording and trace, each with its size and SHA-256 |
viewports[].console_errors |
Raw console errors from the page. Shown as evidence, never as a diagnosis |
payment |
Amount, network and the settlement transaction on Base |
fixture_disclosure |
Present when the store is AisleRun's test store |
limitations |
What this result can't tell you |
Every evidence URL in a report is signed and stops working after 30 minutes. Fetch the report again for fresh links. Recordings support HTTP range requests, so video players can seek.
In the browser
Open report_url to see the same run as a page: the recording beside the first blocker, steps you can click to jump the recording, and the payment. While the run is still going, the page shows what's happening now, what it's waiting on, and what comes next, all from the event stream.