curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events \
--header 'Authorization: Bearer <token>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events"
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}/entities/{entityType}/{entityId}/email-link-events', 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}/entities/{entityType}/{entityId}/email-link-events",
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}/entities/{entityType}/{entityId}/email-link-events"
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}/entities/{entityType}/{entityId}/email-link-events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events")
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": "9d8c7b6a-5f4e-4d3c-8b2a-1f0e9d8c7b6a",
"action": "removed",
"cause": "manual",
"messageId": "1a2b3c4d-5e6f-4a1b-8c2d-3e4f5a6b7c8d",
"threadId": "7f0c2a1e-4b5d-4c8e-9a71-2d3e4f5a6b7c",
"subject": "Claim update",
"personId": "550e8400-e29b-41d4-a716-446655440010",
"actorUserId": "550e8400-e29b-41d4-a716-446655440099",
"at": "2026-03-02T14:00:00.000Z"
},
{
"id": "8c7b6a5f-4e3d-4c2b-9a1f-0e9d8c7b6a5f",
"action": "linked",
"cause": "new_email",
"messageId": "1a2b3c4d-5e6f-4a1b-8c2d-3e4f5a6b7c8d",
"threadId": "7f0c2a1e-4b5d-4c8e-9a71-2d3e4f5a6b7c",
"subject": "Claim update",
"personId": "550e8400-e29b-41d4-a716-446655440010",
"actorUserId": null,
"at": "2026-02-15T10:00:01.000Z"
}
],
"nextCursor": null
}List Record Email Link Events
The record’s link history: each email linked to it or removed from it,
when, why, through which person and by whom. Newest first, 50 per page.
Pass nextCursor back as cursor for the next page. A caller without
email.view sees only the history of email sent from the platform.
Answers 404 while email is not turned on for the company.
Required permission: <resource>.view for the path’s {entityType}
(event.view, exposure.view, quote.view, submission.view,
person.view, organization.view).
curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events \
--header 'Authorization: Bearer <token>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events"
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}/entities/{entityType}/{entityId}/email-link-events', 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}/entities/{entityType}/{entityId}/email-link-events",
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}/entities/{entityType}/{entityId}/email-link-events"
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}/entities/{entityType}/{entityId}/email-link-events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events")
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": "9d8c7b6a-5f4e-4d3c-8b2a-1f0e9d8c7b6a",
"action": "removed",
"cause": "manual",
"messageId": "1a2b3c4d-5e6f-4a1b-8c2d-3e4f5a6b7c8d",
"threadId": "7f0c2a1e-4b5d-4c8e-9a71-2d3e4f5a6b7c",
"subject": "Claim update",
"personId": "550e8400-e29b-41d4-a716-446655440010",
"actorUserId": "550e8400-e29b-41d4-a716-446655440099",
"at": "2026-03-02T14:00:00.000Z"
},
{
"id": "8c7b6a5f-4e3d-4c2b-9a1f-0e9d8c7b6a5f",
"action": "linked",
"cause": "new_email",
"messageId": "1a2b3c4d-5e6f-4a1b-8c2d-3e4f5a6b7c8d",
"threadId": "7f0c2a1e-4b5d-4c8e-9a71-2d3e4f5a6b7c",
"subject": "Claim update",
"personId": "550e8400-e29b-41d4-a716-446655440010",
"actorUserId": null,
"at": "2026-02-15T10:00:01.000Z"
}
],
"nextCursor": null
}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
Field Model V1 entity type (lowercase kebab-case URL slug). One of the six
CRUD entity types: event, exposure, quote, submission, person,
organization. policy is NOT valid here — Policy has no generic CRUD (its
writes go through the policy transaction endpoints), though it does have a
read-only /configuration schema.
event, exposure, quote, submission, person, organization 