curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/configuration/describe \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/configuration/describe"
payload = {}
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({})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/configuration/describe', 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}/configuration/describe",
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([
]),
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}/configuration/describe"
payload := strings.NewReader("{}")
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}/configuration/describe")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/configuration/describe")
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 = "{}"
response = http.request(request)
puts response.read_body{
"revision": "3f8a1c0d9b7e5a24c6f1e8d20b3a49c7d5e6f80a1b2c3d4e5f60718293a4b5e2",
"entities": [
{
"key": "Exposure",
"fieldCount": 13
},
{
"key": "Quote",
"fieldCount": 31
}
],
"customObjects": [
{
"key": "Coverage",
"name": "Coverage",
"fieldCount": 11,
"frameworkLocked": false
}
],
"optionSets": [
{
"name": "Exposure Types",
"optionCount": 2,
"frameworkLocked": false
}
]
}Describe Configuration (run-down)
Summarizes what the company’s configuration contains, listing each entity
with its number of fields, each custom object, and each dropdown (option
set) with its number of values. Use it to answer “how many fields does
Policy have?” or “which dropdowns exist?”, and as the first call before the
other describe operations. For one entity’s list of fields, call Describe
Configuration Entity (describeFmv1ConfigurationEntity); for the values of
one dropdown, call Describe Configuration Option Set
(describeFmv1ConfigurationOptionSet).
Returns the configuration run-down — a small orientation summary of the
company’s FMV1 configuration: every top-level entity (with its field count),
every custom object (with its name, sub-field count, and lock state), and
every option set (with its option count and lock state), plus a revision
string identifying the stored configuration.
This is the first read for an automated config editor: call describe to
learn what exists, then the per-entity describe endpoint
(describe/{entityOrObjectKey}) to see one entity’s or custom object’s
fields. It does not list individual fields.
The run-down reads the whole configuration from the database (resolved from the API key’s tenant), so the request needs no body — POST an empty object.
Required permission: configuration.view
This endpoint requires an API key that holds the configuration.view
permission — the Admin role does.
See Authentication for how to create API keys with specific roles.
curl --request POST \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/configuration/describe \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/configuration/describe"
payload = {}
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({})
};
fetch('https://go.aiinsurance.io/api/v1/companies/{companyId}/configuration/describe', 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}/configuration/describe",
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([
]),
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}/configuration/describe"
payload := strings.NewReader("{}")
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}/configuration/describe")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{}")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/configuration/describe")
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 = "{}"
response = http.request(request)
puts response.read_body{
"revision": "3f8a1c0d9b7e5a24c6f1e8d20b3a49c7d5e6f80a1b2c3d4e5f60718293a4b5e2",
"entities": [
{
"key": "Exposure",
"fieldCount": 13
},
{
"key": "Quote",
"fieldCount": 31
}
],
"customObjects": [
{
"key": "Coverage",
"name": "Coverage",
"fieldCount": 11,
"frameworkLocked": false
}
],
"optionSets": [
{
"name": "Exposure Types",
"optionCount": 2,
"frameworkLocked": false
}
]
}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.
Body
No input is required — an empty object (or no body) is accepted.
Response
The configuration run-down.
The configuration run-down — a small orientation summary of the company's FMV1 configuration. Lists every top-level entity, custom object, and option set with a count; it does not list individual fields (use the per-entity describe endpoint for those).
