curl --request GET \
--url 'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=sales-analytics' \
--header 'Authorization: Bearer dbn_live_abc123...'
const datamartName = 'sales-analytics';
const response = await fetch(
`https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=${encodeURIComponent(datamartName)}`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer dbn_live_abc123...'
}
}
);
const result = await response.json();
console.log('Tables:', result.data.tables.length);
console.log('Completion:', result.data.completionScore);
import requests
response = requests.get(
'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer',
headers={
'Authorization': 'Bearer dbn_live_abc123...'
},
params={
'datamartName': 'sales-analytics'
}
)
result = response.json()
print(f"Tables: {len(result['data']['tables'])}")
print(f"Completion: {result['data']['completionScore']}%")
require 'net/http'
require 'json'
uri = URI('https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer')
params = { datamartName: 'sales-analytics' }
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer dbn_live_abc123...'
response = http.request(request)
result = JSON.parse(response.body)
puts "Tables: #{result['data']['tables'].length}"
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class GetSemanticLayer {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
String datamartName = URLEncoder.encode("sales-analytics", StandardCharsets.UTF_8);
String url = String.format(
"https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=%s",
datamartName
);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer dbn_live_abc123...")
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
baseURL := "https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer"
params := url.Values{}
params.Add("datamartName", "sales-analytics")
fullURL := fmt.Sprintf("%s?%s", baseURL, params.Encode())
req, _ := http.NewRequest("GET", fullURL, nil)
req.Header.Set("Authorization", "Bearer dbn_live_abc123...")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Printf("Response: %v\n", result)
}
<?php
$params = http_build_query([
'datamartName' => 'sales-analytics'
]);
$url = 'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?' . $params;
$options = [
'http' => [
'header' => 'Authorization: Bearer dbn_live_abc123...',
'method' => 'GET'
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$response = json_decode($result, true);
echo "Tables: " . count($response['data']['tables']);
?>
{
"data": {
"datamartName": "sales-analytics",
"tables": [
{
"name": "orders",
"schemaName": "public",
"description": "Customer purchase orders",
"synonyms": ["purchases", "transactions"],
"miscellaneousInfo": null,
"columns": [
{
"name": "order_id",
"datatype": "integer",
"description": "Unique order identifier",
"synonyms": ["id", "order number"],
"miscellaneousInfo": null,
"columnType": "Identifier",
"columnTypeConfig": null,
"isIdentifier": true,
"isNotIndexed": false
},
{
"name": "status",
"datatype": "varchar",
"description": "Current order status",
"synonyms": ["order status", "state"],
"miscellaneousInfo": null,
"columnType": "ENUM",
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
},
{
"name": "amount",
"datatype": "numeric",
"description": "Total order amount in USD",
"synonyms": ["total", "price"],
"miscellaneousInfo": null,
"columnType": "Number",
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
}
]
}
],
"feedback": "This datamart covers e-commerce sales data. Amounts are in USD.",
"completionScore": 75,
"lastUpdated": "2026-03-15T10:30:00.000Z"
}
}
{
"data": {
"datamartName": "raw-datamart",
"tables": [
{
"name": "events",
"schemaName": "public",
"description": null,
"synonyms": [],
"miscellaneousInfo": null,
"columns": [
{
"name": "event_id",
"datatype": "integer",
"description": null,
"synonyms": [],
"miscellaneousInfo": null,
"columnType": null,
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
}
]
}
],
"feedback": null,
"completionScore": 0,
"lastUpdated": null
}
}
{
"error": {
"code": "INVALID_DATAMART",
"message": "datamartName query parameter is required"
}
}
{
"error": {
"code": "INVALID_DATAMART",
"message": "Datamart 'nonexistent' not found"
}
}
{
"error": {
"code": "AUTHENTICATION_ERROR",
"message": "Semantic Layer API requires a service token, not a data app API token"
}
}
curl --request GET \
--url 'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=sales-analytics' \
--header 'Authorization: Bearer dbn_live_abc123...'
const datamartName = 'sales-analytics';
const response = await fetch(
`https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=${encodeURIComponent(datamartName)}`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer dbn_live_abc123...'
}
}
);
const result = await response.json();
console.log('Tables:', result.data.tables.length);
console.log('Completion:', result.data.completionScore);
import requests
response = requests.get(
'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer',
headers={
'Authorization': 'Bearer dbn_live_abc123...'
},
params={
'datamartName': 'sales-analytics'
}
)
result = response.json()
print(f"Tables: {len(result['data']['tables'])}")
print(f"Completion: {result['data']['completionScore']}%")
require 'net/http'
require 'json'
uri = URI('https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer')
params = { datamartName: 'sales-analytics' }
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer dbn_live_abc123...'
response = http.request(request)
result = JSON.parse(response.body)
puts "Tables: #{result['data']['tables'].length}"
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class GetSemanticLayer {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
String datamartName = URLEncoder.encode("sales-analytics", StandardCharsets.UTF_8);
String url = String.format(
"https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=%s",
datamartName
);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer dbn_live_abc123...")
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
baseURL := "https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer"
params := url.Values{}
params.Add("datamartName", "sales-analytics")
fullURL := fmt.Sprintf("%s?%s", baseURL, params.Encode())
req, _ := http.NewRequest("GET", fullURL, nil)
req.Header.Set("Authorization", "Bearer dbn_live_abc123...")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Printf("Response: %v\n", result)
}
<?php
$params = http_build_query([
'datamartName' => 'sales-analytics'
]);
$url = 'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?' . $params;
$options = [
'http' => [
'header' => 'Authorization: Bearer dbn_live_abc123...',
'method' => 'GET'
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$response = json_decode($result, true);
echo "Tables: " . count($response['data']['tables']);
?>
{
"data": {
"datamartName": "sales-analytics",
"tables": [
{
"name": "orders",
"schemaName": "public",
"description": "Customer purchase orders",
"synonyms": ["purchases", "transactions"],
"miscellaneousInfo": null,
"columns": [
{
"name": "order_id",
"datatype": "integer",
"description": "Unique order identifier",
"synonyms": ["id", "order number"],
"miscellaneousInfo": null,
"columnType": "Identifier",
"columnTypeConfig": null,
"isIdentifier": true,
"isNotIndexed": false
},
{
"name": "status",
"datatype": "varchar",
"description": "Current order status",
"synonyms": ["order status", "state"],
"miscellaneousInfo": null,
"columnType": "ENUM",
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
},
{
"name": "amount",
"datatype": "numeric",
"description": "Total order amount in USD",
"synonyms": ["total", "price"],
"miscellaneousInfo": null,
"columnType": "Number",
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
}
]
}
],
"feedback": "This datamart covers e-commerce sales data. Amounts are in USD.",
"completionScore": 75,
"lastUpdated": "2026-03-15T10:30:00.000Z"
}
}
{
"data": {
"datamartName": "raw-datamart",
"tables": [
{
"name": "events",
"schemaName": "public",
"description": null,
"synonyms": [],
"miscellaneousInfo": null,
"columns": [
{
"name": "event_id",
"datatype": "integer",
"description": null,
"synonyms": [],
"miscellaneousInfo": null,
"columnType": null,
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
}
]
}
],
"feedback": null,
"completionScore": 0,
"lastUpdated": null
}
}
{
"error": {
"code": "INVALID_DATAMART",
"message": "datamartName query parameter is required"
}
}
{
"error": {
"code": "INVALID_DATAMART",
"message": "Datamart 'nonexistent' not found"
}
}
{
"error": {
"code": "AUTHENTICATION_ERROR",
"message": "Semantic Layer API requires a service token, not a data app API token"
}
}
Semantic Layer APIs
Get Semantic Layer
Retrieve the semantic layer configuration for a datamart, including table descriptions, column metadata, and completion score.
curl --request GET \
--url 'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=sales-analytics' \
--header 'Authorization: Bearer dbn_live_abc123...'
const datamartName = 'sales-analytics';
const response = await fetch(
`https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=${encodeURIComponent(datamartName)}`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer dbn_live_abc123...'
}
}
);
const result = await response.json();
console.log('Tables:', result.data.tables.length);
console.log('Completion:', result.data.completionScore);
import requests
response = requests.get(
'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer',
headers={
'Authorization': 'Bearer dbn_live_abc123...'
},
params={
'datamartName': 'sales-analytics'
}
)
result = response.json()
print(f"Tables: {len(result['data']['tables'])}")
print(f"Completion: {result['data']['completionScore']}%")
require 'net/http'
require 'json'
uri = URI('https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer')
params = { datamartName: 'sales-analytics' }
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer dbn_live_abc123...'
response = http.request(request)
result = JSON.parse(response.body)
puts "Tables: #{result['data']['tables'].length}"
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class GetSemanticLayer {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
String datamartName = URLEncoder.encode("sales-analytics", StandardCharsets.UTF_8);
String url = String.format(
"https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=%s",
datamartName
);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer dbn_live_abc123...")
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
baseURL := "https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer"
params := url.Values{}
params.Add("datamartName", "sales-analytics")
fullURL := fmt.Sprintf("%s?%s", baseURL, params.Encode())
req, _ := http.NewRequest("GET", fullURL, nil)
req.Header.Set("Authorization", "Bearer dbn_live_abc123...")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Printf("Response: %v\n", result)
}
<?php
$params = http_build_query([
'datamartName' => 'sales-analytics'
]);
$url = 'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?' . $params;
$options = [
'http' => [
'header' => 'Authorization: Bearer dbn_live_abc123...',
'method' => 'GET'
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$response = json_decode($result, true);
echo "Tables: " . count($response['data']['tables']);
?>
{
"data": {
"datamartName": "sales-analytics",
"tables": [
{
"name": "orders",
"schemaName": "public",
"description": "Customer purchase orders",
"synonyms": ["purchases", "transactions"],
"miscellaneousInfo": null,
"columns": [
{
"name": "order_id",
"datatype": "integer",
"description": "Unique order identifier",
"synonyms": ["id", "order number"],
"miscellaneousInfo": null,
"columnType": "Identifier",
"columnTypeConfig": null,
"isIdentifier": true,
"isNotIndexed": false
},
{
"name": "status",
"datatype": "varchar",
"description": "Current order status",
"synonyms": ["order status", "state"],
"miscellaneousInfo": null,
"columnType": "ENUM",
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
},
{
"name": "amount",
"datatype": "numeric",
"description": "Total order amount in USD",
"synonyms": ["total", "price"],
"miscellaneousInfo": null,
"columnType": "Number",
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
}
]
}
],
"feedback": "This datamart covers e-commerce sales data. Amounts are in USD.",
"completionScore": 75,
"lastUpdated": "2026-03-15T10:30:00.000Z"
}
}
{
"data": {
"datamartName": "raw-datamart",
"tables": [
{
"name": "events",
"schemaName": "public",
"description": null,
"synonyms": [],
"miscellaneousInfo": null,
"columns": [
{
"name": "event_id",
"datatype": "integer",
"description": null,
"synonyms": [],
"miscellaneousInfo": null,
"columnType": null,
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
}
]
}
],
"feedback": null,
"completionScore": 0,
"lastUpdated": null
}
}
{
"error": {
"code": "INVALID_DATAMART",
"message": "datamartName query parameter is required"
}
}
{
"error": {
"code": "INVALID_DATAMART",
"message": "Datamart 'nonexistent' not found"
}
}
{
"error": {
"code": "AUTHENTICATION_ERROR",
"message": "Semantic Layer API requires a service token, not a data app API token"
}
}
GET
/
api
/
v2
/
data-app
/
datamarts
/
semantic-layer
curl --request GET \
--url 'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=sales-analytics' \
--header 'Authorization: Bearer dbn_live_abc123...'
const datamartName = 'sales-analytics';
const response = await fetch(
`https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=${encodeURIComponent(datamartName)}`,
{
method: 'GET',
headers: {
'Authorization': 'Bearer dbn_live_abc123...'
}
}
);
const result = await response.json();
console.log('Tables:', result.data.tables.length);
console.log('Completion:', result.data.completionScore);
import requests
response = requests.get(
'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer',
headers={
'Authorization': 'Bearer dbn_live_abc123...'
},
params={
'datamartName': 'sales-analytics'
}
)
result = response.json()
print(f"Tables: {len(result['data']['tables'])}")
print(f"Completion: {result['data']['completionScore']}%")
require 'net/http'
require 'json'
uri = URI('https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer')
params = { datamartName: 'sales-analytics' }
uri.query = URI.encode_www_form(params)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer dbn_live_abc123...'
response = http.request(request)
result = JSON.parse(response.body)
puts "Tables: #{result['data']['tables'].length}"
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
public class GetSemanticLayer {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
String datamartName = URLEncoder.encode("sales-analytics", StandardCharsets.UTF_8);
String url = String.format(
"https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?datamartName=%s",
datamartName
);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer dbn_live_abc123...")
.GET()
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
baseURL := "https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer"
params := url.Values{}
params.Add("datamartName", "sales-analytics")
fullURL := fmt.Sprintf("%s?%s", baseURL, params.Encode())
req, _ := http.NewRequest("GET", fullURL, nil)
req.Header.Set("Authorization", "Bearer dbn_live_abc123...")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Printf("Response: %v\n", result)
}
<?php
$params = http_build_query([
'datamartName' => 'sales-analytics'
]);
$url = 'https://api.usedatabrain.com/api/v2/data-app/datamarts/semantic-layer?' . $params;
$options = [
'http' => [
'header' => 'Authorization: Bearer dbn_live_abc123...',
'method' => 'GET'
]
];
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
$response = json_decode($result, true);
echo "Tables: " . count($response['data']['tables']);
?>
{
"data": {
"datamartName": "sales-analytics",
"tables": [
{
"name": "orders",
"schemaName": "public",
"description": "Customer purchase orders",
"synonyms": ["purchases", "transactions"],
"miscellaneousInfo": null,
"columns": [
{
"name": "order_id",
"datatype": "integer",
"description": "Unique order identifier",
"synonyms": ["id", "order number"],
"miscellaneousInfo": null,
"columnType": "Identifier",
"columnTypeConfig": null,
"isIdentifier": true,
"isNotIndexed": false
},
{
"name": "status",
"datatype": "varchar",
"description": "Current order status",
"synonyms": ["order status", "state"],
"miscellaneousInfo": null,
"columnType": "ENUM",
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
},
{
"name": "amount",
"datatype": "numeric",
"description": "Total order amount in USD",
"synonyms": ["total", "price"],
"miscellaneousInfo": null,
"columnType": "Number",
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
}
]
}
],
"feedback": "This datamart covers e-commerce sales data. Amounts are in USD.",
"completionScore": 75,
"lastUpdated": "2026-03-15T10:30:00.000Z"
}
}
{
"data": {
"datamartName": "raw-datamart",
"tables": [
{
"name": "events",
"schemaName": "public",
"description": null,
"synonyms": [],
"miscellaneousInfo": null,
"columns": [
{
"name": "event_id",
"datatype": "integer",
"description": null,
"synonyms": [],
"miscellaneousInfo": null,
"columnType": null,
"columnTypeConfig": null,
"isIdentifier": false,
"isNotIndexed": false
}
]
}
],
"feedback": null,
"completionScore": 0,
"lastUpdated": null
}
}
{
"error": {
"code": "INVALID_DATAMART",
"message": "datamartName query parameter is required"
}
}
{
"error": {
"code": "INVALID_DATAMART",
"message": "Datamart 'nonexistent' not found"
}
}
{
"error": {
"code": "AUTHENTICATION_ERROR",
"message": "Semantic Layer API requires a service token, not a data app API token"
}
}
Retrieve the full semantic layer for a given datamart. The response includes table and column metadata (descriptions, synonyms, column types), feedback text, a completion score, and the last-updated timestamp.
This endpoint returns data for datamarts that exist in your organization — even if no semantic layer has been configured yet. In that case, tables are returned with
null/empty semantic fields.Authentication
This endpoint requires a service token in the Authorization header. Data app API tokens are not permitted and will be rejected with a403 error.
To access your service token:
- Go to your Databrain dashboard and open Settings.
- Navigate to Settings.
- Find the Service Tokens section.
- Click the “Generate Token” button to generate a new service token if you don’t have one already.
Headers
string
required
Bearer token for API authentication. Use your service token.
Authorization: Bearer dbn_live_abc123...
Query Parameters
string
required
The name of the datamart whose semantic layer you want to retrieve. Must match an existing datamart in your organization.
Show Finding datamart names
Show Finding datamart names
- Use the List Datamarts API to get all datamart names
- Names are case-sensitive and must match exactly
Response
object
The semantic layer data for the requested datamart.
Show data properties
Show data properties
string
Name of the datamart.
array
Array of table objects with semantic metadata.
Show table properties
Show table properties
string
Table name from the datasource.
string | null
Schema name, or
null if not set.string | null
Human-readable description of the table.
string[]
Alternative names for the table. Empty array if none set.
string | null
Additional context for AI query generation.
array
Array of column objects with semantic metadata.
Show column properties
Show column properties
string
Column name from the datasource.
string | null
The underlying SQL datatype of the column.
string | null
Human-readable description of the column.
string[]
Alternative names for the column.
string | null
Additional context for AI query generation.
string | null
Semantic column type. One of:
String, Long String, String (Custom), ENUM, Mapper, Range, Expression, Identifier, Number, JSON.object | string | null
Stored column-type configuration as saved via the API (object maps for ENUM-like types,
{ lowerLimit, upperLimit } for Range, strings for Expression/JSON, or null).boolean
Whether this column is marked as an identifier.
boolean
Whether this column is excluded from AI indexing.
string | null
Global feedback text providing context to the AI about this datamart.
number
A score from 0 to 100 indicating how thoroughly the semantic layer is configured.
string | null
ISO 8601 timestamp of the last semantic layer update, or
null if never updated.null | object
Error object if the request failed, otherwise not present for successful requests.
Examples
HTTP Status Code Summary
| Status Code | Description |
|---|---|
200 | OK — Semantic layer retrieved successfully |
400 | Bad Request — Missing or invalid datamartName |
401 | Unauthorized — Invalid or missing API token |
403 | Forbidden — Data app token used instead of service token |
500 | Internal Server Error — Server error occurred |
Possible Errors
| Error Code | HTTP Status | Description |
|---|---|---|
INVALID_DATAMART | 400 | datamartName is missing or datamart doesn’t exist |
AUTHENTICATION_ERROR | 403 | Data app token used instead of service token |
INTERNAL_SERVER_ERROR | 500 | Server error |
Next Steps
Create Semantic Layer
Add semantic metadata to your datamart
Update Semantic Layer
Modify existing semantic layer metadata
Semantic Layer Guide
Learn how to configure the semantic layer in the UI
List Datamarts
Find datamart names in your organization
⌘I

