Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
[This article is prerelease documentation and is subject to change.]
Dataverse semantic models define the Dataverse tables available for answering natural-language questions. This article explains how to list, create, and delete these models by using the Dataverse Ask APIs, helping you manage which tables your application can query.
Before using these APIs, complete the steps in Get started with the Dataverse Ask APIs.
Replace [Organization URI] with the organization URI, such as https://contoso.api.crm.dynamics.com.
Choose tables for a semantic model
Use table logical names, such as account, contact, and opportunity. Don't use display names, entity set names, or collection names.
Choose only tables relevant to the questions your application needs to answer. The identity that submits an Ask request must have read access to the selected tables, columns, and records.
List semantic models
The List operation returns semantic models available in the current Dataverse environment.
GET [Organization URI]/api/iq/v1.0/semanticmodel HTTP/1.1
Authorization: Bearer <access token>
Accept: application/json
A successful request returns 200 OK:
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000001",
"uniqueName": "Sales pipeline",
"source": "SemanticModelAPI",
"description": "This is a test semantic model for demo purpose",
"tables": [
"account",
"opportunity"
],
"createdBy": "Adele Vance",
"modifiedOn": "2026-08-17T20:00:00Z",
"createdOn": "2026-08-15T17:30:00Z",
"ownerId": "00000000-0000-0000-0000-000000000002",
"owner": "Adele Vance"
}
]
}
Don't rely on array order. Locate a model by its exact uniqueName or id.
Semantic model properties
| Name | Type | Nullable | Description |
|---|---|---|---|
id |
String (GUID) | Yes | The unique identifier of the semantic model. |
uniqueName |
String | Yes | The unique name of the semantic model. |
tables |
Array of String | Yes | Logical names of the associated Dataverse tables. |
createdBy |
String | Yes | The full name of the user who created the semantic model. |
modifiedOn |
String (date-time) | Yes | The UTC date and time when the semantic model was last modified. |
createdOn |
String (date-time) | Yes | The UTC date and time when the semantic model was created. |
ownerId |
String (GUID) | Yes | The unique identifier of the semantic model owner. |
owner |
String | Yes | Full name of the user who owns this semantic model. |
source |
String | Yes | Identifies the channel that created the semantic model. |
description |
String | Yes | Description of this semantic model. |
Create a semantic model
The create operation associates a unique name with one or more Dataverse tables.
POST [Organization URI]/api/iq/v1.0/semanticmodel HTTP/1.1
Authorization: Bearer <access token>
Accept: application/json
Content-Type: application/json
{
"uniqueName": "Sales pipeline",
"tables": [
"account",
"opportunity"
]
}
Request properties
| Name | Type | Required | Description |
|---|---|---|---|
uniqueName |
String | Yes | The unique name of the semantic model to create. |
tables |
Array of String | Yes | One or more Dataverse table logical names to associate with the model. |
A successful request returns 201 Created:
{
"data": {
"id": "00000000-0000-0000-0000-000000000001",
"uniqueName": "Sales pipeline",
"createdOn": "2026-08-17T20:00:00Z"
},
"message": "Semantic model created successfully"
}
| Name | Type | Nullable | Description |
|---|---|---|---|
data.id |
String (GUID) | Yes | The unique identifier of the created semantic model. |
data.uniqueName |
String | Yes | The unique name of the created semantic model. |
data.createdOn |
String (date-time) | No | The UTC date and time when the semantic model was created. |
message |
String | Yes | A message describing the result of the operation. |
Store id if your application needs to delete the model later. Use uniqueName as the semanticModelName value in an Ask request.
Semantic model names must be unique in an environment. If a request has an uncertain outcome because of a network or transient error, list semantic models before sending it again.
Delete a semantic model
The delete operation uses the semantic model id, not its name.
Before deleting a semantic model, find the apps and agents that use it to assess the impact.
Important
You can delete only semantic models that you created by using the Create operation. You can't delete semantic models associated with an app module, bot, or agent by using this API.
DELETE [Organization URI]/api/iq/v1.0/semanticmodel/00000000-0000-0000-0000-000000000001 HTTP/1.1
Authorization: Bearer <access token>
Accept: application/json
| Name | Type | Description |
|---|---|---|
id |
String (GUID) | The unique identifier of the semantic model to delete. |
A successful request returns 200 OK:
{
"data": {
"id": "00000000-0000-0000-0000-000000000001"
},
"message": "Semantic model deleted successfully"
}
| Name | Type | Nullable | Description |
|---|---|---|---|
data.id |
String (GUID) | Yes | The unique identifier of the deleted semantic model. |
message |
String | Yes | A message describing the result of the operation. |
After deletion, applications can no longer use the model name in Ask requests.
Find apps and agents that use a semantic model
Use the optional include=botinfo query parameter to identify app modules, bot components, and agents that use each semantic model. Use this information to assess dependencies before you change or delete a semantic model, or to investigate which applications and agents reference it.
The botinfo value isn't case-sensitive. The include parameter accepts a comma-separated list of values.
GET [Organization URI]/api/iq/v1.0/semanticmodel?include=botinfo HTTP/1.1
Authorization: Bearer <access token>
Accept: application/json
A successful request returns 200 OK:
{
"data": [
{
"id": "00000000-0000-0000-0000-000000000003",
"uniqueName": "Sales pipeline",
"source": "SemanticModelAPI",
"description": "This is a test semantic model for demo purpose",
"tables": [
"lead",
"product"
],
"createdBy": "Adele Vance",
"modifiedOn": "2026-08-17T20:00:00Z",
"createdOn": "2026-08-15T17:30:00Z",
"ownerId": "00000000-0000-0000-0000-000000000004",
"owner": "Adele Vance",
"m365AppModuleId": "00000000-0000-0000-0000-000000000005",
"appModulePrimaryName": "Customer Service Hub",
"appModulePrimaryUniqueName": "Customerservicehub",
"m365AppModuleIdSecondary": "00000000-0000-0000-0000-000000000006",
"appModuleSecondaryName": "Power Pages Management",
"appModuleSecondaryUniqueName": "mspp_PowerPageManagement",
"bots": [
{
"botComponentName": "SalesSpecificQnA",
"agentName": "Copilot in Dynamics 365 Sales"
}
]
}
]
}
Additional app and agent properties
| Name | Type | Nullable | Description |
|---|---|---|---|
m365AppModuleId |
String | Yes | ID of the model-driven app associated with an ALM-compliant primary semantic model. This value is backed by a Dataverse lookup relationship to the app module. |
m365AppModuleIdSecondary |
String | Yes | App module ID associated with a secondary semantic model. This value is stored as a GUID and doesn't create an ALM-managed relationship to the app module. |
appModulePrimaryName |
String | Yes | Display name of the app module referenced by m365AppModuleId. |
appModulePrimaryUniqueName |
String | Yes | Logical name of the app module referenced by m365AppModuleId. |
appModuleSecondaryName |
String | Yes | Display name of the app module whose ID is stored in m365AppModuleIdSecondary. |
appModuleSecondaryUniqueName |
String | Yes | Logical name of the app module whose ID is stored in m365AppModuleIdSecondary. |
bots |
Array of Object | Yes | Bot components and agents that use the semantic model. |
botComponentName |
String | Yes | Display name of a bot component that uses or references the semantic model. Returned within the bots collection. |
agentName |
String | Yes | Display name of the agent that contains the bot component. Returned within the bots collection. |
Fine-tune a semantic model
After you create the semantic model, you can fine-tune it on the Semantic model page in Power Apps:
Signals: Turn system-inferred signal types, such as table summaries or form summaries, on or off across all tables. You can also exclude tables that contain sensitive or irrelevant data and turn off individual views or relationships that are outdated or misleading. For more information, see Fine-tune semantic model signals.
Glossary: Add business vocabulary that the system can't infer, such as acronyms or organization-specific terms, so agents interpret user questions correctly. For more information, see Manage semantic model glossary entries.
Refresh: The semantic model regenerates automatically every 12 hours. To apply your changes immediately, trigger a manual regeneration. For more information, see Regenerate the semantic model.