curl --request GET \
--url https://api.canary.effectiveai.app/api/v2/insurance/regulatory-documents \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.canary.effectiveai.app/api/v2/insurance/regulatory-documents"
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/regulatory-documents', 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/regulatory-documents",
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/regulatory-documents"
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/regulatory-documents")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.canary.effectiveai.app/api/v2/insurance/regulatory-documents")
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{
"documents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "<string>",
"kind": "bulletin",
"identifier": "<string>",
"title": "<string>",
"status": "final",
"publishedDate": "2023-12-25",
"firstSeenAt": "2023-11-07T05:31:56Z",
"toiCodes": [
"<string>"
],
"impactTags": [
"<string>"
],
"summary": "<string>"
}
],
"exhaustive": true,
"nextCursor": "<string>"
}{
"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"
}Find regulatory documents
Find US statutes, regulations, bulletins, orders, bills, filing requirements, form checklists and NAIC material. With query, results are ranked by relevance from a bounded window of the best 200 word matches and the best 200 meaning matches, so exhaustive is false and other documents can match. Without query, every matching document is listed in a fixed sort order; follow nextCursor to the end. Different filters combine with AND; repeated values of one filter combine with OR. No date bounds apply unless you send them. To poll for new documents, use firstSeenFrom with sort=-firstSeenAt, overlap each poll and drop IDs you have seen. Read one document with getRegulatoryDocument and its text with getRegulatoryDocumentText. Charges: with query, a nonempty page costs 0.02plus0.003 per returned document; without query, $0.003 per returned document. Empty pages and failed requests are free.
curl --request GET \
--url https://api.canary.effectiveai.app/api/v2/insurance/regulatory-documents \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.canary.effectiveai.app/api/v2/insurance/regulatory-documents"
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/regulatory-documents', 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/regulatory-documents",
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/regulatory-documents"
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/regulatory-documents")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.canary.effectiveai.app/api/v2/insurance/regulatory-documents")
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{
"documents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"state": "<string>",
"kind": "bulletin",
"identifier": "<string>",
"title": "<string>",
"status": "final",
"publishedDate": "2023-12-25",
"firstSeenAt": "2023-11-07T05:31:56Z",
"toiCodes": [
"<string>"
],
"impactTags": [
"<string>"
],
"summary": "<string>"
}
],
"exhaustive": true,
"nextCursor": "<string>"
}{
"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-...
Query Parameters
Maximum items to return, 1–100. Default 50.
1 <= x <= 100Opaque nextCursor from the previous page. Repeat the same filters and limit. Expires 24 hours after the first page.
1 - 128Words or a question to rank documents by relevance. Results come from a bounded window of the best word and meaning matches, so exhaustive is false. Omit it to list every matching document in a fixed order.
1 - 500Two-letter jurisdiction codes, or ALL for national NAIC material. Repeat for OR.
^(?:[A-Za-z]{2}|[Aa][Ll][Ll])$Document kinds. Repeat for OR.
bulletin, circular_letter, data_call, examination_standards, filing_requirement, form_checklist, guideline, informational_memo, legislative_bill, mcas_scorecard, meeting_materials, model_law, model_law_adoption, news_release, order, reference_document, regulation, statute, survey Exact statuses. Repeat for OR. Documents without a status never match.
final, informational, emergency, proposed, withdrawn, superseded, introduced, passed_chamber, enacted, vetoed, failed Exact TOI values (OR). 21.0 does not match 21.1. H, L, T and ALL are separate values; ALL matches only documents tagged ALL. Statutes and most orders have no TOI.
1 - 20^[A-Za-z0-9.]+$Impact tags. Repeat for OR.
rating, underwriting, claims, forms, market_conduct, licensing, data_reporting, consumer_protection, fraud, reinsurance, solvency, ai_ml, climate, cybersecurity Exact publisher identifier, such as 28 TAC § 5.7013. Identifiers repeat across documents, so this returns a list.
1 - 500Inclusive lower bound on publishedDate. Drops undated documents.
Inclusive upper bound on publishedDate. Drops undated documents.
Inclusive lower bound on firstSeenAt, as an RFC 3339 timestamp. Use it with sort=-firstSeenAt to poll for new documents.
Fixed order without query. -firstSeenAt (default) and -publishedDate are newest first; identifier is ascending. Missing values sort last, then ID. Not allowed with query, which ranks by relevance.
-firstSeenAt, -publishedDate, identifier Response
A page of documents.
Show child attributes
Show child attributes
False with query: results come from a bounded relevance window, and other documents can match. True without query: following nextCursor reaches every matching document.
Cursor for the next page, or null on the last.