curl --request GET \
--url https://automations-api.vortexiq.ai/v1/automations/runs/{runId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://automations-api.vortexiq.ai/v1/automations/runs/{runId}"
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/{runId}', 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/{runId}",
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/{runId}"
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/{runId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://automations-api.vortexiq.ai/v1/automations/runs/{runId}")
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": {
"run": {
"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"
},
"steps": [
{
"seq": 1,
"label": "Read the store profile",
"op": "shopify.starter:shopifyStarterStore",
"connection": "shopify",
"state": "done",
"at": "2026-10-16T09:26:05.722Z",
"ms": 320,
"reused": false,
"count": null
},
{
"seq": 2,
"label": "Read products",
"op": "shopify.starter:shopifyStarterProducts",
"connection": "shopify",
"state": "done",
"at": "2026-10-16T09:26:06.042Z",
"ms": 69,
"reused": false,
"count": null
}
],
"steps_available": true
}
}{
"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": {}
}{
"success": false,
"contract_version": 2,
"message": "<string>",
"code": "<string>",
"errors": {}
}Get run
One run: its status, timings, summary and result, and the steps it has taken. While the run is queued or
running, ask again every few seconds; pass the highest step seq you already have as after_seq to get only
the steps since. A run ends succeeded, failed, refused, cancelled or expired; waiting_approval
means it waits for someone to decide in the Vortex IQ app.
If the step history cannot be read for a moment, the run’s status still comes back, with steps_available: false.
Needs the automations:read scope.
curl --request GET \
--url https://automations-api.vortexiq.ai/v1/automations/runs/{runId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://automations-api.vortexiq.ai/v1/automations/runs/{runId}"
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/{runId}', 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/{runId}",
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/{runId}"
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/{runId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://automations-api.vortexiq.ai/v1/automations/runs/{runId}")
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": {
"run": {
"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"
},
"steps": [
{
"seq": 1,
"label": "Read the store profile",
"op": "shopify.starter:shopifyStarterStore",
"connection": "shopify",
"state": "done",
"at": "2026-10-16T09:26:05.722Z",
"ms": 320,
"reused": false,
"count": null
},
{
"seq": 2,
"label": "Read products",
"op": "shopify.starter:shopifyStarterProducts",
"connection": "shopify",
"state": "done",
"at": "2026-10-16T09:26:06.042Z",
"ms": 69,
"reused": false,
"count": null
}
],
"steps_available": true
}
}{
"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": {}
}{
"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.
Path Parameters
The run's id. A public id (a ULID).
^[0-9A-HJKMNP-TV-Z]{26}$Query Parameters
Only the steps after this sequence number.
x >= 0Was this page helpful?