curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts \
--header 'Authorization: Bearer <token>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts', 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}/imports/attempts",
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://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts"
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://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts")
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{
"items": [
{
"id": "3f6c2a1e-8b4d-4c7a-9e21-5d0b7a9c1f42",
"importRowId": "9a1d4e7b-2c3f-4b8a-8d61-0e5f2a7b3c94",
"entityType": "Submission",
"action": "create",
"attemptBatch": "fix-broker-names",
"transformations": {
"submissionName": "submission.name",
"brokerName": "broker.fullName"
},
"guards": [
{
"condition": "brokerName != null",
"errorMessage": "A submission needs a broker name."
}
],
"transformationResult": {
"status": "ok",
"entity": {
"submissionName": "Acme Logistics",
"brokerName": "Dana Reyes"
}
},
"guardResult": {
"passed": true
},
"writeResult": {
"status": "ok",
"entityId": "6e2b8f14-3a7c-4d9e-b051-2c8a9f7d4e13",
"created": true
},
"createdAt": "2026-10-22T15:04:11.512Z",
"updatedAt": "2026-10-22T15:04:11.896Z"
},
{
"id": "1b7e9d3a-6c2f-4e8b-a5d0-7f3c1e9b2a68",
"importRowId": "9a1d4e7b-2c3f-4b8a-8d61-0e5f2a7b3c94",
"entityType": "Submission",
"action": "create",
"attemptBatch": "october-load",
"transformations": {
"submissionName": "submission.name",
"brokerName": "broker.name"
},
"guards": [
{
"condition": "brokerName != null",
"errorMessage": "A submission needs a broker name."
}
],
"transformationResult": {
"status": "ok",
"entity": {
"submissionName": "Acme Logistics"
}
},
"guardResult": {
"passed": false,
"failures": [
{
"index": 0,
"errorMessage": "A submission needs a broker name.",
"reason": "refused"
}
]
},
"writeResult": null,
"createdAt": "2026-10-22T14:58:02.087Z",
"updatedAt": "2026-10-22T14:58:02.471Z"
}
],
"totalCount": 2,
"page": 1,
"pageSize": 50
}List Import Attempts
Lists import attempts, newest first. Each attempt is one try at mapping an
import row into a record and writing it, with what failed if it did. Use it
to find failed import rows, filtered by jobId for an import job or by
importBatch for a batch, and open one with Get Import Attempt
(getFmv1ImportAttempt).
Lists the company’s import attempts, newest first. Each attempt is one
transform → guard → write pass over an import row, recorded whether or not
the write happened, with the transformations and guards it ran with and what
each stage produced. Each item is the whole attempt, as
GET /imports/attempts/{importAttemptId} returns it.
Filtering
Every filter is optional and exact-match; filters combine with AND.
importBatch— attempts on import rows sent with thatimportBatch. This finds every attempt on a batch’s rows, including retries that carry anattemptBatchof their own.attemptBatch— attempts recorded with thatattemptBatch. An attempt made by animportrequest takes the request’simportBatch; a retry carries theattemptBatchit was sent with.jobId— attempts made by that import job.importRowId,entityType,action— attempts on one row, of one entity type, or that created or updated.
An unknown query parameter, or a filter value outside its allowed values, is
a 400, never an unfiltered or empty page.
Paging
page and pageSize are the standard 1-based pagination parameters.
totalCount counts every attempt matching the filters, ignoring the paging.
Continue while page * pageSize < totalCount.
Only attempts whose entity type you may import are listed: a key holding
person.import alone sees only Person attempts, and totalCount counts
only those.
Required permission: <entityType>.import for the entityType filter
(person.import for Person); without the filter, any one of
event.import, exposure.import, quote.import, submission.import,
person.import, organization.import or policy.import.
curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts \
--header 'Authorization: Bearer <token>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts', 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}/imports/attempts",
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://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts"
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://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/attempts")
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{
"items": [
{
"id": "3f6c2a1e-8b4d-4c7a-9e21-5d0b7a9c1f42",
"importRowId": "9a1d4e7b-2c3f-4b8a-8d61-0e5f2a7b3c94",
"entityType": "Submission",
"action": "create",
"attemptBatch": "fix-broker-names",
"transformations": {
"submissionName": "submission.name",
"brokerName": "broker.fullName"
},
"guards": [
{
"condition": "brokerName != null",
"errorMessage": "A submission needs a broker name."
}
],
"transformationResult": {
"status": "ok",
"entity": {
"submissionName": "Acme Logistics",
"brokerName": "Dana Reyes"
}
},
"guardResult": {
"passed": true
},
"writeResult": {
"status": "ok",
"entityId": "6e2b8f14-3a7c-4d9e-b051-2c8a9f7d4e13",
"created": true
},
"createdAt": "2026-10-22T15:04:11.512Z",
"updatedAt": "2026-10-22T15:04:11.896Z"
},
{
"id": "1b7e9d3a-6c2f-4e8b-a5d0-7f3c1e9b2a68",
"importRowId": "9a1d4e7b-2c3f-4b8a-8d61-0e5f2a7b3c94",
"entityType": "Submission",
"action": "create",
"attemptBatch": "october-load",
"transformations": {
"submissionName": "submission.name",
"brokerName": "broker.name"
},
"guards": [
{
"condition": "brokerName != null",
"errorMessage": "A submission needs a broker name."
}
],
"transformationResult": {
"status": "ok",
"entity": {
"submissionName": "Acme Logistics"
}
},
"guardResult": {
"passed": false,
"failures": [
{
"index": 0,
"errorMessage": "A submission needs a broker name.",
"reason": "refused"
}
]
},
"writeResult": null,
"createdAt": "2026-10-22T14:58:02.087Z",
"updatedAt": "2026-10-22T14:58:02.471Z"
}
],
"totalCount": 2,
"page": 1,
"pageSize": 50
}Authorizations
User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0 access token (audience = the app API audience) as Authorization: Bearer <jwt>. The request resolves to the user's identity and is authorized by their Role on the {companyId} in the path — the same role-based permissions the web app enforces. This is the path the MCP connector uses to act on a user's behalf; endpoints that accept it list both BearerAuth and ApiKeyAuth.
Query Parameters
Response
One page of the company's import attempts
One page of a company's import attempts, newest first.
