Skip to main content
POST
/
test
/
visual
Visual Tests
curl --request POST \
  --url https://api.example.com/test/visual \
  --header 'Content-Type: application/json' \
  --data '
{
  "action": "<string>",
  "data": {
    "url": "<string>",
    "name": "<string>",
    "routeId": "<string>",
    "when": "<string>",
    "time": "<string>",
    "engine": "<string>"
  }
}
'
import requests

url = "https://api.example.com/test/visual"

payload = {
"action": "<string>",
"data": {
"url": "<string>",
"name": "<string>",
"routeId": "<string>",
"when": "<string>",
"time": "<string>",
"engine": "<string>"
}
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
action: '<string>',
data: {
url: '<string>',
name: '<string>',
routeId: '<string>',
when: '<string>',
time: '<string>',
engine: '<string>'
}
})
};

fetch('https://api.example.com/test/visual', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/test/visual",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'action' => '<string>',
'data' => [
'url' => '<string>',
'name' => '<string>',
'routeId' => '<string>',
'when' => '<string>',
'time' => '<string>',
'engine' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.example.com/test/visual"

payload := strings.NewReader("{\n \"action\": \"<string>\",\n \"data\": {\n \"url\": \"<string>\",\n \"name\": \"<string>\",\n \"routeId\": \"<string>\",\n \"when\": \"<string>\",\n \"time\": \"<string>\",\n \"engine\": \"<string>\"\n }\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.example.com/test/visual")
.header("Content-Type", "application/json")
.body("{\n \"action\": \"<string>\",\n \"data\": {\n \"url\": \"<string>\",\n \"name\": \"<string>\",\n \"routeId\": \"<string>\",\n \"when\": \"<string>\",\n \"time\": \"<string>\",\n \"engine\": \"<string>\"\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.example.com/test/visual")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"action\": \"<string>\",\n \"data\": {\n \"url\": \"<string>\",\n \"name\": \"<string>\",\n \"routeId\": \"<string>\",\n \"when\": \"<string>\",\n \"time\": \"<string>\",\n \"engine\": \"<string>\"\n }\n}"

response = http.request(request)
puts response.read_body
{
  "routes": [
    {}
  ],
  "route": {},
  "transaction_id": "<string>"
}
Manage and run visual tests across desktop, laptop, iPad, and mobile viewports. Dispatch the desired operation with the action field in the request body.

Actions

ActionDescription
listList visual routes with their latest result.
addRegister a new URL for visual monitoring.
deleteRemove a visual route.
resultsRetrieve stored visual results.
runTrigger a visual test immediately.
scheduleSchedule a visual run.

Headers

x-transaction-id
string
Optional caller-provided transaction identifier for tracing.

Request body

action
string
required
One of list, add, delete, results, run, or schedule.
data
object
Payload for the selected action.

Response

routes
array
Returned by list. Each entry includes id, url, name, createdAt, running, and latest (a VisualLatestResult with status, takenAt, workflowId, and per-device imageUrl/analysis).
route
object
Returned by add.
transaction_id
string
Returned by run and schedule — the async job identifier.
Every successful response includes the X-Credits-Remaining header.