curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/export-presets \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ownerUserId": "3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91",
"entityType": "exposure",
"name": "Underwriting view",
"fieldKeys": [
"exposureName",
"id",
"createdAt"
]
}
'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/export-presets"
payload = {
"ownerUserId": "3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91",
"entityType": "exposure",
"name": "Underwriting view",
"fieldKeys": ["exposureName", "id", "createdAt"]
}
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({
ownerUserId: '3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91',
entityType: 'exposure',
name: 'Underwriting view',
fieldKeys: ['exposureName', 'id', 'createdAt']
})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/export-presets', 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}/export-presets",
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([
'ownerUserId' => '3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91',
'entityType' => 'exposure',
'name' => 'Underwriting view',
'fieldKeys' => [
'exposureName',
'id',
'createdAt'
]
]),
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}/export-presets"
payload := strings.NewReader("{\n \"ownerUserId\": \"3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91\",\n \"entityType\": \"exposure\",\n \"name\": \"Underwriting view\",\n \"fieldKeys\": [\n \"exposureName\",\n \"id\",\n \"createdAt\"\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}/export-presets")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"ownerUserId\": \"3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91\",\n \"entityType\": \"exposure\",\n \"name\": \"Underwriting view\",\n \"fieldKeys\": [\n \"exposureName\",\n \"id\",\n \"createdAt\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/export-presets")
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 \"ownerUserId\": \"3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91\",\n \"entityType\": \"exposure\",\n \"name\": \"Underwriting view\",\n \"fieldKeys\": [\n \"exposureName\",\n \"id\",\n \"createdAt\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "9b1d4e7a-2c3f-4a8b-b6d5-0e7f1a2c3d4e",
"ownerUserId": "3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91",
"entityType": "exposure",
"name": "Underwriting view",
"visibility": "private",
"fieldKeys": [
"exposureName",
"id",
"createdAt"
],
"createdAt": "2026-09-25T14:03:22.418Z"
}Create Export Preset For Member
Creates a private saved export preset in the export screen of the
company member named by ownerUserId. The preset belongs to that
member: the caller never becomes the owner unless it names itself as
ownerUserId. The caller is recorded as the preset’s creator for audit.
fieldKeys are the preset’s columns and are saved in the order given.
Every key must be one the company’s export surface offers for that
entityType: the system columns id, createdAt, updatedAt, the
configured export-surface columns, and for event the financial overview
columns. Child (rowSource) columns are not supported here.
- An unknown key fails the whole request with
400 UnknownExportFieldKey; the error carriesunknownFieldKeys, listing every key that was refused. Nothing is saved. - An
ownerUserIdwho is not a member of the company is400 ExportPresetOwnerNotMember. - A
namethe owner already uses for a preset of that entity type (compared case-insensitively, ignoring surrounding spaces) is409 ExportPresetNameTaken; the error carriesexistingPresetNames, the owner’s current preset names for that entity type.
The created preset is private: only its owner (and staff) sees it, and the owner finds it in their export screen for that entity type.
Required permission: export-preset.create-for-member
curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/export-presets \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"ownerUserId": "3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91",
"entityType": "exposure",
"name": "Underwriting view",
"fieldKeys": [
"exposureName",
"id",
"createdAt"
]
}
'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/export-presets"
payload = {
"ownerUserId": "3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91",
"entityType": "exposure",
"name": "Underwriting view",
"fieldKeys": ["exposureName", "id", "createdAt"]
}
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({
ownerUserId: '3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91',
entityType: 'exposure',
name: 'Underwriting view',
fieldKeys: ['exposureName', 'id', 'createdAt']
})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/export-presets', 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}/export-presets",
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([
'ownerUserId' => '3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91',
'entityType' => 'exposure',
'name' => 'Underwriting view',
'fieldKeys' => [
'exposureName',
'id',
'createdAt'
]
]),
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}/export-presets"
payload := strings.NewReader("{\n \"ownerUserId\": \"3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91\",\n \"entityType\": \"exposure\",\n \"name\": \"Underwriting view\",\n \"fieldKeys\": [\n \"exposureName\",\n \"id\",\n \"createdAt\"\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}/export-presets")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"ownerUserId\": \"3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91\",\n \"entityType\": \"exposure\",\n \"name\": \"Underwriting view\",\n \"fieldKeys\": [\n \"exposureName\",\n \"id\",\n \"createdAt\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/export-presets")
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 \"ownerUserId\": \"3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91\",\n \"entityType\": \"exposure\",\n \"name\": \"Underwriting view\",\n \"fieldKeys\": [\n \"exposureName\",\n \"id\",\n \"createdAt\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "9b1d4e7a-2c3f-4a8b-b6d5-0e7f1a2c3d4e",
"ownerUserId": "3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91",
"entityType": "exposure",
"name": "Underwriting view",
"visibility": "private",
"fieldKeys": [
"exposureName",
"id",
"createdAt"
],
"createdAt": "2026-09-25T14:03:22.418Z"
}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.
Path Parameters
Company identifier
Body
The company member who will own the preset and see it in their export screen.
The entity type whose export screen the preset belongs to, in the same kebab spelling the export-runs routes use.
event, exposure, quote, submission, person, organization, policy The preset's name. Surrounding spaces are trimmed. Must not match (case-insensitively) a name the owner already uses for this entity type.
1 - 255The preset's columns, in column order. Each key must be offered by the company's export surface for entityType, and no key may repeat.
11Response
The preset was created and belongs to ownerUserId.
The ID of the created preset
The member who owns the preset
event, exposure, quote, submission, person, organization, policy The saved (trimmed) name
Always private for presets created here
private The saved column order, exactly as requested
