curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-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://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-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: <api-key>"
],
]);
$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://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"runId": "0f204eac-17e5-42bc-93b1-0dd2aea57baa",
"flow": "submission",
"target": {
"kind": "folder",
"id": "3c93ad46-9d7c-4f5a-b4de-9f0f9a4f6a2e"
},
"parseTaskName": "create_submission_v1",
"status": "succeeded",
"attempts": 1,
"createdAt": "2026-06-30T12:01:30.000Z",
"finishedAt": "2026-06-30T12:03:05.000Z",
"stages": {
"extract": {
"status": "succeeded",
"attempts": 1,
"finishedAt": "2026-06-30T12:02:10.000Z"
},
"parse": {
"status": "succeeded",
"attempts": 1,
"finishedAt": "2026-06-30T12:03:05.000Z"
}
},
"createdEntities": [
{
"entityType": "submission",
"entityId": "2b8dc3a1-51de-4f92-a3a0-1f5ba3a9a111",
"deleted": false
},
{
"entityType": "quote",
"entityId": "61b3c2d4-7a90-4a1c-8321-9adf5f2f2222",
"deleted": false
}
],
"extractionReady": true,
"rerunOfRunId": null,
"reusedExtractOfRunId": null
},
{
"runId": "994bfc11-8ff3-485a-89ff-7839c9bb6101",
"flow": null,
"target": null,
"parseTaskName": "extract",
"status": "succeeded",
"attempts": 1,
"createdAt": "2026-06-30T11:01:10.000Z",
"finishedAt": "2026-06-30T11:01:25.000Z",
"legacy": true
}
],
"totalCount": 2
}List Parse Runs
Check the progress and outcome of document parsing started with Trigger
Parse (triggerCompanyFileParse), including the exposure, submission, and
quote records it created. The list has no run filter: page through it
newest first, find the runId that Trigger Parse returned, and poll until
its status is succeeded or failed.
List a company’s parse runs, newest-first and paginated. Use this to poll the outcome of a parse you kicked with Trigger Parse.
A run record is one logical parse run — the extract stage and the
create_<flow>_v<N> parse stage of a single trigger, reported together:
runIdis the logical run’s stable id.flowis the flow the run implements (submission,policy,exposures, orinvoice).targetis the{ kind, id }file or folder the run parsed.statusis the overall run status, collapsed to one ofrunning,succeeded, orfailed(every internalfailed_*retry state reads asfailed; a run that will still be retried reportsfailedhere — checkstagesforretryingdetail. A run holding for a precondition reads asrunning, because it has not failed).stagesbreaks the run into itsextractandparsestages, each with its ownstatus(including the distinctretrying, the not-yet-startedpending, andwaiting— holding for a precondition, not a failure),attempts, optionalerror, andfinishedAt.createdEntitieslists the entities the run created (entityType+entityId); an entity deleted after the run reportsdeleted: true.extractionReadysays whether the run’s merged extraction artifact was persisted.erroris present only on a run that recorded a failure message.
Runs that predate run grouping are reported as legacy records
(legacy: true): one record per pipeline task, target: null, no
stages/createdEntities.
Pagination uses the standard 1-based page / pageSize query params.
Required permission: file.view
curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs \
--header 'Authorization: <api-key>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-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://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-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: <api-key>"
],
]);
$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://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/files/parse-runs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"items": [
{
"runId": "0f204eac-17e5-42bc-93b1-0dd2aea57baa",
"flow": "submission",
"target": {
"kind": "folder",
"id": "3c93ad46-9d7c-4f5a-b4de-9f0f9a4f6a2e"
},
"parseTaskName": "create_submission_v1",
"status": "succeeded",
"attempts": 1,
"createdAt": "2026-06-30T12:01:30.000Z",
"finishedAt": "2026-06-30T12:03:05.000Z",
"stages": {
"extract": {
"status": "succeeded",
"attempts": 1,
"finishedAt": "2026-06-30T12:02:10.000Z"
},
"parse": {
"status": "succeeded",
"attempts": 1,
"finishedAt": "2026-06-30T12:03:05.000Z"
}
},
"createdEntities": [
{
"entityType": "submission",
"entityId": "2b8dc3a1-51de-4f92-a3a0-1f5ba3a9a111",
"deleted": false
},
{
"entityType": "quote",
"entityId": "61b3c2d4-7a90-4a1c-8321-9adf5f2f2222",
"deleted": false
}
],
"extractionReady": true,
"rerunOfRunId": null,
"reusedExtractOfRunId": null
},
{
"runId": "994bfc11-8ff3-485a-89ff-7839c9bb6101",
"flow": null,
"target": null,
"parseTaskName": "extract",
"status": "succeeded",
"attempts": 1,
"createdAt": "2026-06-30T11:01:10.000Z",
"finishedAt": "2026-06-30T11:01:25.000Z",
"legacy": true
}
],
"totalCount": 2
}