curl --request GET \
--url https://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development', 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://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development",
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://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development"
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://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development")
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{
"statementYear": 5949,
"lossDevelopmentRows": [
{
"id": "<string>",
"carrier": {
"id": "<string>",
"name": "<string>"
},
"naicCompanyCode": "<string>",
"statementYear": 5949,
"line": {
"code": "A",
"name": "<string>",
"scheme": "schedule-p"
},
"part": "2",
"section": "<string>",
"variant": "<string>",
"sourceRow": "<string>",
"rowType": "prior",
"accidentYear": 5949,
"development": {
"measure": "incurred_net_losses_and_dcc",
"unit": "usd",
"values": [
{
"evaluationYear": 5949,
"developmentMonths": 123,
"value": 123
}
]
},
"supplemental": [
{
"measure": "incurred_net_losses_and_dcc",
"unit": "usd",
"value": 123
}
],
"sources": [
{
"exhibit": "<string>",
"statementYear": 5949
}
]
}
],
"nextCursor": "<string>",
"sources": [
{
"exhibit": "<string>",
"statementYear": 5949
}
]
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}List a carrier’s Schedule P loss development rows
Requires the organization’s NAIC dataset grant after acceptance of the NAIC terms. The grant is checked before carrier lookup on every request. Each nonempty successful request costs 0.02plus0.05 per returned row; one row is one printed accident-year, prior, totals or earned-premium row of one page. Empty results and failed requests are not charged; repeated successful reads are charged again. Read stored Schedule P development triangles for one lettered line (required), such as R for products liability. Each row is one printed row: its development cells by evaluation year and the supplemental columns reported beside them. Keeps Schedule P’s structure: lettered line, part, section, page variant and printed row. Parts 2 to 4 are net of reinsurance; Part 5 claim counts are direct and assumed; Part 6 sections 1, 1A and 1B are direct and assumed premiums earned; sections 2, 2A and 2B are ceded. Money is whole US dollars scaled from reported thousands; counts are not scaled. Negative values are preserved. Blank and zero cells are not loaded, so absent cells are not evidence of zero. No development factors, ultimates, ratios or sums are calculated. Part 1, Part 7 loss-sensitive contracts and numbered statement lines are not included. Rows remain separate for each source NAIC company. Ordered by source NAIC code, part, page variant and row number (text ordering). Live keyset paging is not a snapshot; reimports can change values. Repeat the original filters and limit with nextCursor; an omitted statementYear stays pinned. Cursors expire after 24 hours and are bound to the caller, carrier identifiers and query. Read an item at GET /insurance/carriers//loss-development/ using lossDevelopmentRows[].id. Read-only; private, no-store.
curl --request GET \
--url https://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development', 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://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development",
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://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development"
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://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.canary.effectiveai.app/api/v2/insurance/carriers/{carrierId}/loss-development")
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{
"statementYear": 5949,
"lossDevelopmentRows": [
{
"id": "<string>",
"carrier": {
"id": "<string>",
"name": "<string>"
},
"naicCompanyCode": "<string>",
"statementYear": 5949,
"line": {
"code": "A",
"name": "<string>",
"scheme": "schedule-p"
},
"part": "2",
"section": "<string>",
"variant": "<string>",
"sourceRow": "<string>",
"rowType": "prior",
"accidentYear": 5949,
"development": {
"measure": "incurred_net_losses_and_dcc",
"unit": "usd",
"values": [
{
"evaluationYear": 5949,
"developmentMonths": 123,
"value": 123
}
]
},
"supplemental": [
{
"measure": "incurred_net_losses_and_dcc",
"unit": "usd",
"value": 123
}
],
"sources": [
{
"exhibit": "<string>",
"statementYear": 5949
}
]
}
],
"nextCursor": "<string>",
"sources": [
{
"exhibit": "<string>",
"statementYear": 5949
}
]
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}{
"error": "<string>",
"code": "<string>",
"details": [
{
"location": "path",
"path": [
"<string>"
],
"code": "required",
"message": "<string>"
}
],
"requestId": "<string>",
"dataset": "naic"
}Authorizations
Effective API key. Send Authorization: Bearer sk-eai-...
Path Parameters
Managed carrier_ ID or bare checked code. Legacy five-digit NAIC codes and naic: codes are also accepted.
1 - 100Query Parameters
Lettered Schedule P line, a separate scheme from numbered statement lines: A Homeowners/Farmowners; B Private Passenger Auto Liability; C Commercial Auto/Truck Liability/Medical; D Workers' Compensation; E Commercial Multiple Peril; F Medical Professional Liability; G Special Liability (Ocean Marine, Aircraft, Boiler & Machinery); H Other Liability; I Special Property (Fire, Allied Lines, Inland Marine, Earthquake); J Auto Physical Damage; K Fidelity & Surety; L Other (Including Credit, Accident & Health); M International; N Reinsurance - Nonproportional Assumed Property; O Reinsurance - Nonproportional Assumed Liability; P Reinsurance - Nonproportional Assumed Financial Lines; R Products Liability; S Financial Guaranty/Mortgage Guaranty; T Warranty; U Pet Insurance Plans; SUMMARY All Lines Combined. SUMMARY is the reported all-lines page; never add it to lettered lines.
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, R, S, T, U, SUMMARY Read one Schedule P part. Omit for parts 2 to 6.
2, 3, 4, 5, 6 Annual statement year. Omit for the latest year with any loaded Schedule P triangle for this carrier, chosen before line and part filters. A continuation pins it.
^\d{4}$Maximum number of items to return (1-200).
1 <= x <= 200nextCursor from the previous page.
Response
One page of Schedule P rows.
Resolved statement year, fixed for this traversal.
1900 <= x <= 9999Show child attributes
Show child attributes
Cursor for the next page, or null on the last page.
The Schedule P parts this request selected and their statement year.
Show child attributes
Show child attributes