curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/events/{eventId}/close \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"effectiveOnDate": {
"date": "2026-08-05",
"timezone": "America/New_York"
}
}
'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/events/{eventId}/close"
payload = { "effectiveOnDate": {
"date": "2026-08-05",
"timezone": "America/New_York"
} }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({effectiveOnDate: {date: '2026-08-05', timezone: 'America/New_York'}})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/events/{eventId}/close', 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}/events/{eventId}/close",
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([
'effectiveOnDate' => [
'date' => '2026-08-05',
'timezone' => 'America/New_York'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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}/events/{eventId}/close"
payload := strings.NewReader("{\n \"effectiveOnDate\": {\n \"date\": \"2026-08-05\",\n \"timezone\": \"America/New_York\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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}/events/{eventId}/close")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"effectiveOnDate\": {\n \"date\": \"2026-08-05\",\n \"timezone\": \"America/New_York\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/events/{eventId}/close")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"effectiveOnDate\": {\n \"date\": \"2026-08-05\",\n \"timezone\": \"America/New_York\"\n }\n}"
response = http.request(request)
puts response.read_body{
"eventId": "550e8400-e29b-41d4-a716-446655440020",
"eventStatus": "closed"
}Close Event
Closes an event (a claim or an incident) as of a date you choose, in one
atomic call: the event’s status becomes closed, its Close Date is
stamped with the date you send, and a close entry is appended to the
event’s open/close-history log.
Use this instead of setting eventStatus. The field is system-managed:
a generic write of it — on create or on a PATCH to
/entities/event/{entityId} — is silently ignored, leaving the stored value
unchanged. The status and the log have to move together — the lifecycle
dates a claim reports (opened on, previously closed on, re-opened on) are
derived from that log, so a status change that skipped it would silently
misreport them. A historical import loads a closed claim by supplying its
eventOpenCloseHistory: the platform derives the status from the log’s
last entry (on create, or via
PUT /events/{eventId}/open-close-history).
effectiveOnDate is the date the closure TAKES EFFECT — typically the
day the adjuster closed the file, which may be earlier than today. The date
you acted is recorded separately by the platform and is not settable.
The log cannot run backwards. effectiveOnDate must be on or after the
last entry already in the event’s log; an earlier date returns 409
(EventLifecycleDateOutOfOrder), and the message names the date it has to
clear. The same day as the previous entry is allowed. In practice this means
an event cannot be closed before the day it was opened.
Required permission: event.close
curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/events/{eventId}/close \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"effectiveOnDate": {
"date": "2026-08-05",
"timezone": "America/New_York"
}
}
'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/events/{eventId}/close"
payload = { "effectiveOnDate": {
"date": "2026-08-05",
"timezone": "America/New_York"
} }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({effectiveOnDate: {date: '2026-08-05', timezone: 'America/New_York'}})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/events/{eventId}/close', 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}/events/{eventId}/close",
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([
'effectiveOnDate' => [
'date' => '2026-08-05',
'timezone' => 'America/New_York'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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}/events/{eventId}/close"
payload := strings.NewReader("{\n \"effectiveOnDate\": {\n \"date\": \"2026-08-05\",\n \"timezone\": \"America/New_York\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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}/events/{eventId}/close")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"effectiveOnDate\": {\n \"date\": \"2026-08-05\",\n \"timezone\": \"America/New_York\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/events/{eventId}/close")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"effectiveOnDate\": {\n \"date\": \"2026-08-05\",\n \"timezone\": \"America/New_York\"\n }\n}"
response = http.request(request)
puts response.read_body{
"eventId": "550e8400-e29b-41d4-a716-446655440020",
"eventStatus": "closed"
}Authorizations
API key authentication. Send your raw API key as the Authorization header value with NO scheme prefix — Authorization: YOUR-API-KEY. Do NOT prefix it with Bearer or ApiKey, and do not use an X-API-Key header; those are not accepted.
Path Parameters
Company identifier
Event (claim or incident) identifier
Body
Field Model V1 Date value: a calendar day pinned to an IANA time zone —
the day a person wrote on the policy, not an instant.
date is the day as YYYY-MM-DD and must name a real calendar day
(2026-02-30 is rejected with 400). timezone is an IANA tz database
identifier (e.g. America/New_York, UTC); an unknown zone is rejected
with 400. On a write timezone may be omitted, in which case it defaults
to America/New_York. Every value the API returns carries both members.
This is the one Date shape the API accepts, stores and returns, for every
field typed Date — entity fields, policy term dates, custom-object
sub-fields, embedded exposure items and the event lifecycle dates alike. The
retired { day, month, year, timezone } spelling is refused with 400
(see the API changelog, 2026-09-08). The policy endorsement deltas channel
additionally requires both members stated, because it stores each value
exactly as sent (2026-09-04).
Show child attributes
Show child attributes
