curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/pages/{pageKey}/layout \
--header 'Authorization: Bearer <token>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/pages/{pageKey}/layout"
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}/pages/{pageKey}/layout', 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}/pages/{pageKey}/layout",
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}/pages/{pageKey}/layout"
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}/pages/{pageKey}/layout")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/pages/{pageKey}/layout")
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{
"page": {
"pageKey": "eventViewDetails",
"name": "View Event - Event Details",
"description": "Event details tab of the view event page",
"entity": "Event",
"pageType": "viewEdit"
},
"cards": [
{
"cardKey": "eventDetails",
"name": "Event Details",
"entity": "Event",
"cardType": "viewEdit",
"columnCount": 4,
"displayPosition": 1,
"placements": [
{
"fieldReferenceId": "eventName",
"label": "Event Name",
"position": {
"row": 1,
"column": 1,
"rowSpan": 1,
"columnSpan": 4,
"zAxis": 0
},
"inputModality": "Text Box",
"inputModalityArgs": null,
"displayFormat": "Plain Text",
"displayFormatArgs": null
}
]
}
]
}Get Page Layout
Read the layout of one registered SDUI page, including cards, field placements, rendering arguments, and unevaluated display/required conditions. Nested cards referenced by card lists and row-card tables are included transitively, once each. Unrelated pages and record values are excluded. A registered page with no configured cards returns an empty cards array.
Required permission: the page’s owning entity view permission:
event.view, exposure.view, quote.view, policy.view, submission.view,
person.view, or organization.view. configuration.view is not required
and does not substitute for the owning entity’s view permission.
For example, eventViewDetails requires event.view, quoteViewDetails
requires quote.view, and policyViewDetails requires policy.view.
Page keys are case-sensitive application constants, not tenant-defined names.
The response’s entity identifies the page’s owner, including Quote for quote,
bind, cancellation, and underwriting flow pages.
This is layout metadata, not permission to perform an action. Record reads,
linked records, edits, and workflow actions retain their own authorization.
Display conditions are presentation rules, never access controls. Clients
supply field schemas, record data, and expression evaluation separately.
Configuration-authoring describe/* reads continue to require configuration.view.
curl --request GET \
--url https://go.aiinsurance.io/api/v1/companies/{companyId}/pages/{pageKey}/layout \
--header 'Authorization: Bearer <token>'import requests
url = "https://go.aiinsurance.io/api/v1/companies/{companyId}/pages/{pageKey}/layout"
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}/pages/{pageKey}/layout', 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}/pages/{pageKey}/layout",
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}/pages/{pageKey}/layout"
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}/pages/{pageKey}/layout")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://go.aiinsurance.io/api/v1/companies/{companyId}/pages/{pageKey}/layout")
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{
"page": {
"pageKey": "eventViewDetails",
"name": "View Event - Event Details",
"description": "Event details tab of the view event page",
"entity": "Event",
"pageType": "viewEdit"
},
"cards": [
{
"cardKey": "eventDetails",
"name": "Event Details",
"entity": "Event",
"cardType": "viewEdit",
"columnCount": 4,
"displayPosition": 1,
"placements": [
{
"fieldReferenceId": "eventName",
"label": "Event Name",
"position": {
"row": 1,
"column": 1,
"rowSpan": 1,
"columnSpan": 4,
"zAxis": 0
},
"inputModality": "Text Box",
"inputModalityArgs": null,
"displayFormat": "Plain Text",
"displayFormatArgs": 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
Company identifier
Registered page key, such as eventViewDetails, quoteViewDetails, or policyViewDetails.
Response
Requested page metadata and its reachable layout.
