curl --request POST \
--url https://api.example.com/api/semantic-models/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain_name": "<string>",
"domain_urn": "<string>",
"user_prompt": "<string>",
"include_tables": [
"<string>"
],
"exclude_tables": [
"<string>"
],
"target_catalog": "iceberg",
"target_schema": "<string>",
"auto_submit_for_review": true
}
'import requests
url = "https://api.example.com/api/semantic-models/generate"
payload = {
"domain_name": "<string>",
"domain_urn": "<string>",
"user_prompt": "<string>",
"include_tables": ["<string>"],
"exclude_tables": ["<string>"],
"target_catalog": "iceberg",
"target_schema": "<string>",
"auto_submit_for_review": True
}
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({
domain_name: '<string>',
domain_urn: '<string>',
user_prompt: '<string>',
include_tables: ['<string>'],
exclude_tables: ['<string>'],
target_catalog: 'iceberg',
target_schema: '<string>',
auto_submit_for_review: true
})
};
fetch('https://api.example.com/api/semantic-models/generate', 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.example.com/api/semantic-models/generate",
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([
'domain_name' => '<string>',
'domain_urn' => '<string>',
'user_prompt' => '<string>',
'include_tables' => [
'<string>'
],
'exclude_tables' => [
'<string>'
],
'target_catalog' => 'iceberg',
'target_schema' => '<string>',
'auto_submit_for_review' => true
]),
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://api.example.com/api/semantic-models/generate"
payload := strings.NewReader("{\n \"domain_name\": \"<string>\",\n \"domain_urn\": \"<string>\",\n \"user_prompt\": \"<string>\",\n \"include_tables\": [\n \"<string>\"\n ],\n \"exclude_tables\": [\n \"<string>\"\n ],\n \"target_catalog\": \"iceberg\",\n \"target_schema\": \"<string>\",\n \"auto_submit_for_review\": true\n}")
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://api.example.com/api/semantic-models/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain_name\": \"<string>\",\n \"domain_urn\": \"<string>\",\n \"user_prompt\": \"<string>\",\n \"include_tables\": [\n \"<string>\"\n ],\n \"exclude_tables\": [\n \"<string>\"\n ],\n \"target_catalog\": \"iceberg\",\n \"target_schema\": \"<string>\",\n \"auto_submit_for_review\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/semantic-models/generate")
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 = "{\n \"domain_name\": \"<string>\",\n \"domain_urn\": \"<string>\",\n \"user_prompt\": \"<string>\",\n \"include_tables\": [\n \"<string>\"\n ],\n \"exclude_tables\": [\n \"<string>\"\n ],\n \"target_catalog\": \"iceberg\",\n \"target_schema\": \"<string>\",\n \"auto_submit_for_review\": true\n}"
response = http.request(request)
puts response.read_body{
"task_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"celery_task_id": "<string>",
"domain_urn": "<string>",
"status": "<string>",
"submitted_by": "<string>",
"submitted_at": "2023-11-07T05:31:56Z",
"message": "Task submitted successfully.",
"models_generated": 123,
"result_model_ids": [
"<string>"
]
}{
"error": "<string>",
"code": 500
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Generate semantic model
Submit a task to automatically generate semantic models using AI.
Required roles: nx1_semantic_modeller or nx1_semantic_admin
The domain_urn in the request specifies which DataHub domain to scan. The AI only analyzes datasets within that domain.
Use GET /semantic-models/tasks/{task_id} to check progress.
curl --request POST \
--url https://api.example.com/api/semantic-models/generate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"domain_name": "<string>",
"domain_urn": "<string>",
"user_prompt": "<string>",
"include_tables": [
"<string>"
],
"exclude_tables": [
"<string>"
],
"target_catalog": "iceberg",
"target_schema": "<string>",
"auto_submit_for_review": true
}
'import requests
url = "https://api.example.com/api/semantic-models/generate"
payload = {
"domain_name": "<string>",
"domain_urn": "<string>",
"user_prompt": "<string>",
"include_tables": ["<string>"],
"exclude_tables": ["<string>"],
"target_catalog": "iceberg",
"target_schema": "<string>",
"auto_submit_for_review": True
}
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({
domain_name: '<string>',
domain_urn: '<string>',
user_prompt: '<string>',
include_tables: ['<string>'],
exclude_tables: ['<string>'],
target_catalog: 'iceberg',
target_schema: '<string>',
auto_submit_for_review: true
})
};
fetch('https://api.example.com/api/semantic-models/generate', 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.example.com/api/semantic-models/generate",
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([
'domain_name' => '<string>',
'domain_urn' => '<string>',
'user_prompt' => '<string>',
'include_tables' => [
'<string>'
],
'exclude_tables' => [
'<string>'
],
'target_catalog' => 'iceberg',
'target_schema' => '<string>',
'auto_submit_for_review' => true
]),
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://api.example.com/api/semantic-models/generate"
payload := strings.NewReader("{\n \"domain_name\": \"<string>\",\n \"domain_urn\": \"<string>\",\n \"user_prompt\": \"<string>\",\n \"include_tables\": [\n \"<string>\"\n ],\n \"exclude_tables\": [\n \"<string>\"\n ],\n \"target_catalog\": \"iceberg\",\n \"target_schema\": \"<string>\",\n \"auto_submit_for_review\": true\n}")
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://api.example.com/api/semantic-models/generate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"domain_name\": \"<string>\",\n \"domain_urn\": \"<string>\",\n \"user_prompt\": \"<string>\",\n \"include_tables\": [\n \"<string>\"\n ],\n \"exclude_tables\": [\n \"<string>\"\n ],\n \"target_catalog\": \"iceberg\",\n \"target_schema\": \"<string>\",\n \"auto_submit_for_review\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/semantic-models/generate")
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 = "{\n \"domain_name\": \"<string>\",\n \"domain_urn\": \"<string>\",\n \"user_prompt\": \"<string>\",\n \"include_tables\": [\n \"<string>\"\n ],\n \"exclude_tables\": [\n \"<string>\"\n ],\n \"target_catalog\": \"iceberg\",\n \"target_schema\": \"<string>\",\n \"auto_submit_for_review\": true\n}"
response = http.request(request)
puts response.read_body{
"task_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"celery_task_id": "<string>",
"domain_urn": "<string>",
"status": "<string>",
"submitted_by": "<string>",
"submitted_at": "2023-11-07T05:31:56Z",
"message": "Task submitted successfully.",
"models_generated": 123,
"result_model_ids": [
"<string>"
]
}{
"error": "<string>",
"code": 500
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Headers
Body
Request to generate semantic models using AI.
Domain name. For example, Finance. Requires either domain_name or domain_urn.
DataHub domain URN. For example, urn:li:domain:Finance. Requires either domain_name or domain_urn.
Optional description of what kind of models to generate.
Specific tables to include. Defaults to all tables in a domain.
Tables to exclude from generation.
Target Trino catalog for views.
Target schema. Default: domain name
Automatically submit generated models for review.
Response
Generation task submitted
Response for a generation task submission.
Internal task ID.
Celery task ID. Empty if synchronous.
Number of models generated if completed.
IDs of generated models if completed.
Was this page helpful?

