curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"importBatch": "october-load",
"rows": [
{
"sourceId": "A-1",
"name": "Acme"
},
{
"sourceId": "A-2",
"name": "Other"
}
]
}
'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows"
payload = {
"importBatch": "october-load",
"rows": [
{
"sourceId": "A-1",
"name": "Acme"
},
{
"sourceId": "A-2",
"name": "Other"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
importBatch: 'october-load',
rows: [{sourceId: 'A-1', name: 'Acme'}, {sourceId: 'A-2', name: 'Other'}]
})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows', 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/rows",
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([
'importBatch' => 'october-load',
'rows' => [
[
'sourceId' => 'A-1',
'name' => 'Acme'
],
[
'sourceId' => 'A-2',
'name' => 'Other'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows"
payload := strings.NewReader("{\n \"importBatch\": \"october-load\",\n \"rows\": [\n {\n \"sourceId\": \"A-1\",\n \"name\": \"Acme\"\n },\n {\n \"sourceId\": \"A-2\",\n \"name\": \"Other\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"importBatch\": \"october-load\",\n \"rows\": [\n {\n \"sourceId\": \"A-1\",\n \"name\": \"Acme\"\n },\n {\n \"sourceId\": \"A-2\",\n \"name\": \"Other\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"importBatch\": \"october-load\",\n \"rows\": [\n {\n \"sourceId\": \"A-1\",\n \"name\": \"Acme\"\n },\n {\n \"sourceId\": \"A-2\",\n \"name\": \"Other\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"importRowIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"importBatch": "<string>"
}Import Rows
Stores up to 1000 records from a spreadsheet or another system, as JSON
values, without mapping or writing any records yet. It is the first step of
a bulk load or migration; tag the rows with an importBatch, then map them
into records with Queue Import Job (queueFmv1ImportJob). For one record
with an immediate result, use Import Entity (createFmv1Import).
Stores each element of rows unchanged as a separate import row. No entity type, mapping, guard or FMV1 configuration is needed. No attempt or entity is created. Returns the IDs in request order. Queue an import job to transform them, now or later.
A request accepts 1 to 1000 arbitrary JSON values; send multiple batches for larger loads. Repeating a request stores additional rows. Storage preserves JSON values, not the original JSON text’s whitespace or key order.
For an indivisible source record too large for an ordinary request, send
rowsGzipBase64 instead of rows: standard padded base64 of gzip-compressed
UTF-8 JSON for the whole rows array. The server authenticates before decoding,
accepts at most 16 MiB compressed and 128 MiB expanded, then validates and
stores the original values. Never send both alternatives. Encoded source
payloads are excluded from audit logs.
Required permission: any one of event.import, exposure.import, quote.import, submission.import, person.import, organization.import or policy.import. Untyped rows are readable by any caller holding one of these permissions in the company.
curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"importBatch": "october-load",
"rows": [
{
"sourceId": "A-1",
"name": "Acme"
},
{
"sourceId": "A-2",
"name": "Other"
}
]
}
'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows"
payload = {
"importBatch": "october-load",
"rows": [
{
"sourceId": "A-1",
"name": "Acme"
},
{
"sourceId": "A-2",
"name": "Other"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
importBatch: 'october-load',
rows: [{sourceId: 'A-1', name: 'Acme'}, {sourceId: 'A-2', name: 'Other'}]
})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows', 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/rows",
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([
'importBatch' => 'october-load',
'rows' => [
[
'sourceId' => 'A-1',
'name' => 'Acme'
],
[
'sourceId' => 'A-2',
'name' => 'Other'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows"
payload := strings.NewReader("{\n \"importBatch\": \"october-load\",\n \"rows\": [\n {\n \"sourceId\": \"A-1\",\n \"name\": \"Acme\"\n },\n {\n \"sourceId\": \"A-2\",\n \"name\": \"Other\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"importBatch\": \"october-load\",\n \"rows\": [\n {\n \"sourceId\": \"A-1\",\n \"name\": \"Acme\"\n },\n {\n \"sourceId\": \"A-2\",\n \"name\": \"Other\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/imports/rows")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"importBatch\": \"october-load\",\n \"rows\": [\n {\n \"sourceId\": \"A-1\",\n \"name\": \"Acme\"\n },\n {\n \"sourceId\": \"A-2\",\n \"name\": \"Other\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"importRowIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"importBatch": "<string>"
}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.
Body
- Option 1
- Option 2
Alternative to rows for large indivisible source records. Standard
padded base64 of gzip-compressed UTF-8 JSON containing the complete rows
array. Send exactly one of rows or rowsGzipBase64. The compressed bytes
must not exceed 16 MiB, and the expanded JSON must not exceed 128 MiB.
The decoded array follows the same 1–1000 row validation and preserves
every JSON value. Malformed or oversized payloads are rejected before
any rows are stored. Authentication precedes decompression.
1 - 22369624