curl --request GET \
--url https://automations-api.vortexiq.ai/v1/automations/runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://automations-api.vortexiq.ai/v1/automations/runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://automations-api.vortexiq.ai/v1/automations/runs', 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://automations-api.vortexiq.ai/v1/automations/runs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://automations-api.vortexiq.ai/v1/automations/runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://automations-api.vortexiq.ai/v1/automations/runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://automations-api.vortexiq.ai/v1/automations/runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"contract_version": 1,
"data": {
"runs": [
{
"id": "01M520GSPK8P7TMXQHFQN1VYXP",
"automation_id": "01M520GSDQH5TQ3CAAQ584TTKH",
"template_id": "shopify-catalogue-quality",
"template_version": 4,
"trigger": "manual",
"lane": "interactive",
"mode": "normal",
"status": "succeeded",
"reason_code": null,
"message": null,
"platform_fault": false,
"attempt": 1,
"store_label": "Example Shopify store",
"queued_at": "2026-10-16T09:26:03.731Z",
"started_at": "2026-10-16T09:26:04.602Z",
"finished_at": "2026-10-16T09:26:06.219Z",
"duration_ms": 1617,
"queue_wait_ms": 871,
"cancel_requested_at": null,
"summary": "5 findings across 12 products.",
"result": {
"ok": true,
"records": [
{
"finding": "Add a product description.",
"product": "Rain Jacket",
"product_id": "1010",
"product_url": "https://admin.shopify.com/store/example-store/products/1010"
},
{
"sku": "(missing)",
"finding": "Add a SKU for this variant.",
"product": "Rain Jacket",
"product_id": "1010",
"variant_id": "5019",
"product_url": "https://admin.shopify.com/store/example-store/products/1010"
}
],
"skipped": [],
"summary": "5 findings across 12 products.",
"coverage": {
"scope": "Online Store catalogue; online sellable quantity; default shop currency. Market-specific pricing and checkout eligibility require review in Shopify.",
"complete": true,
"products": 12,
"variants": 24
},
"next_step": "Open the linked products and review these findings before making changes."
},
"result_truncated": false,
"usage": {
"ai_calls": 0,
"ai_tokens_in": 0,
"ai_tokens_out": 0,
"peak_memory_mb": 142,
"connector_calls": 3
},
"receipt": {
"reads": [
{
"what": "Read the store profile",
"count": 0
},
{
"what": "Read products",
"count": 0
}
],
"ai_model": null,
"ai_provider": null,
"cached_answers_reused": 0
},
"event_ref": null,
"created_by": 7,
"created_via": "api-token",
"api_client_id": "viq_auto_Ab12Cd34Ef56Gh78Ij90Kl12"
},
{
"id": "01M520EW4E8RE0QDFRB9VSXQ0F",
"automation_id": "01M520EQVS8H6AVZK1BECZEGR0",
"template_id": "shopify-catalogue-quality",
"template_version": 4,
"trigger": "manual",
"lane": "interactive",
"mode": "normal",
"status": "cancelled",
"reason_code": "cancelled_by_merchant",
"message": null,
"platform_fault": false,
"attempt": 1,
"store_label": "Example Shopify store",
"queued_at": "2026-10-16T09:25:00.686Z",
"started_at": null,
"finished_at": "2026-10-16T09:25:00.712Z",
"duration_ms": null,
"queue_wait_ms": null,
"cancel_requested_at": "2026-10-16T09:25:00.712Z",
"summary": null,
"result": null,
"result_truncated": false,
"usage": null,
"receipt": null,
"event_ref": null,
"created_by": 7,
"created_via": "api-token",
"api_client_id": "viq_auto_Ab12Cd34Ef56Gh78Ij90Kl12"
}
],
"page": {
"page": 1,
"per_page": 2,
"total": 26
}
}
}{
"success": false,
"contract_version": 2,
"message": "<string>",
"code": "<string>",
"errors": {}
}{
"success": false,
"contract_version": 2,
"message": "<string>",
"code": "<string>",
"errors": {}
}{
"success": false,
"contract_version": 2,
"message": "<string>",
"code": "<string>",
"errors": {}
}List runs
Run history, newest first, a page at a time. Filter by automation_id and status. Each run carries its
status, timings, summary, and who started it: created_via and api_client_id for a run started through this
API, and trigger (manual, schedule or event).
Needs the automations:read scope.
curl --request GET \
--url https://automations-api.vortexiq.ai/v1/automations/runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://automations-api.vortexiq.ai/v1/automations/runs"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://automations-api.vortexiq.ai/v1/automations/runs', 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://automations-api.vortexiq.ai/v1/automations/runs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://automations-api.vortexiq.ai/v1/automations/runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://automations-api.vortexiq.ai/v1/automations/runs")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://automations-api.vortexiq.ai/v1/automations/runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"contract_version": 1,
"data": {
"runs": [
{
"id": "01M520GSPK8P7TMXQHFQN1VYXP",
"automation_id": "01M520GSDQH5TQ3CAAQ584TTKH",
"template_id": "shopify-catalogue-quality",
"template_version": 4,
"trigger": "manual",
"lane": "interactive",
"mode": "normal",
"status": "succeeded",
"reason_code": null,
"message": null,
"platform_fault": false,
"attempt": 1,
"store_label": "Example Shopify store",
"queued_at": "2026-10-16T09:26:03.731Z",
"started_at": "2026-10-16T09:26:04.602Z",
"finished_at": "2026-10-16T09:26:06.219Z",
"duration_ms": 1617,
"queue_wait_ms": 871,
"cancel_requested_at": null,
"summary": "5 findings across 12 products.",
"result": {
"ok": true,
"records": [
{
"finding": "Add a product description.",
"product": "Rain Jacket",
"product_id": "1010",
"product_url": "https://admin.shopify.com/store/example-store/products/1010"
},
{
"sku": "(missing)",
"finding": "Add a SKU for this variant.",
"product": "Rain Jacket",
"product_id": "1010",
"variant_id": "5019",
"product_url": "https://admin.shopify.com/store/example-store/products/1010"
}
],
"skipped": [],
"summary": "5 findings across 12 products.",
"coverage": {
"scope": "Online Store catalogue; online sellable quantity; default shop currency. Market-specific pricing and checkout eligibility require review in Shopify.",
"complete": true,
"products": 12,
"variants": 24
},
"next_step": "Open the linked products and review these findings before making changes."
},
"result_truncated": false,
"usage": {
"ai_calls": 0,
"ai_tokens_in": 0,
"ai_tokens_out": 0,
"peak_memory_mb": 142,
"connector_calls": 3
},
"receipt": {
"reads": [
{
"what": "Read the store profile",
"count": 0
},
{
"what": "Read products",
"count": 0
}
],
"ai_model": null,
"ai_provider": null,
"cached_answers_reused": 0
},
"event_ref": null,
"created_by": 7,
"created_via": "api-token",
"api_client_id": "viq_auto_Ab12Cd34Ef56Gh78Ij90Kl12"
},
{
"id": "01M520EW4E8RE0QDFRB9VSXQ0F",
"automation_id": "01M520EQVS8H6AVZK1BECZEGR0",
"template_id": "shopify-catalogue-quality",
"template_version": 4,
"trigger": "manual",
"lane": "interactive",
"mode": "normal",
"status": "cancelled",
"reason_code": "cancelled_by_merchant",
"message": null,
"platform_fault": false,
"attempt": 1,
"store_label": "Example Shopify store",
"queued_at": "2026-10-16T09:25:00.686Z",
"started_at": null,
"finished_at": "2026-10-16T09:25:00.712Z",
"duration_ms": null,
"queue_wait_ms": null,
"cancel_requested_at": "2026-10-16T09:25:00.712Z",
"summary": null,
"result": null,
"result_truncated": false,
"usage": null,
"receipt": null,
"event_ref": null,
"created_by": 7,
"created_via": "api-token",
"api_client_id": "viq_auto_Ab12Cd34Ef56Gh78Ij90Kl12"
}
],
"page": {
"page": 1,
"per_page": 2,
"total": 26
}
}
}{
"success": false,
"contract_version": 2,
"message": "<string>",
"code": "<string>",
"errors": {}
}{
"success": false,
"contract_version": 2,
"message": "<string>",
"code": "<string>",
"errors": {}
}{
"success": false,
"contract_version": 2,
"message": "<string>",
"code": "<string>",
"errors": {}
}Authorizations
A bearer token from Login, sent as Authorization: Bearer <token>. Valid for 60 minutes; it acts as the person named at login, within their organisation, and never approves. Rotating or disabling the organisation's API credential ends every token made with it on its next call. See Authentication.
Query Parameters
Only the runs of this automation. A public id (a ULID).
^[0-9A-HJKMNP-TV-Z]{26}$Only runs in this status, such as failed.
queued, running, waiting_approval, succeeded, failed, refused, cancelled, expired The page to read, from 1.
x >= 1Runs a page, 1 to 100 (25 unless you say).
1 <= x <= 100Was this page helpful?