Assessments
The AI Readiness routes for assessments. The other areas are listed on the AI Readiness reference.
Every route below follows the conventions in Work with the BI Pixie API. You can also download the OpenAPI document.
Assess many semantic models in one run #
POST /v1/workspaces/{workspaceId}/aiReadiness/assess
Starts one assessment run over the semantic models the body names, at most 100, all in this workspace, and answers with the operation to ask about. The run is the one the BI Pixie portal starts from its picker: the whole run is counted against the day's assessments up front and refused whole when the allowance cannot cover it, every semantic model's name comes from Fabric, and each assessment is stored where the account keeps its results.
The run is accepted whole or not at all. A semantic model that is not in this workspace, or that the signed-in person cannot see, answers 404 ItemNotFound naming every such id in parameters; one BI Pixie maintains answers 400 OperationNotSupportedForItem the same way. Nothing is spent then.
The operation reports the run: it is Running with percentComplete as semantic models finish, and Succeeded when every one has an outcome. The outcomes are in the result, one row per semantic model, including the ones that were not assessed and why.
- Scope
- BIPixie.ReadWrite.All
- Plan
- Every plan
- Counts against
- Calls that start work, 30 a minute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceId | path | string (uuid) | Yes | The id of the Fabric workspace. |
Request body
JSON, BulkAssessRequest. The body is required.
| Field | Type | Required | Description |
|---|---|---|---|
semanticModelIds | array of string (uuid) | Yes | The semantic models to assess, all in the workspace in the path. |
Responses
202. The run was started. The body carries the operation's id and address.
| Header | Description |
|---|---|
Location | Where to ask about the operation. |
x-ms-operation-id | |
Retry-After | Seconds to wait before asking for the operation's state. |
To follow the work this call started, see Follow a long-running operation.
| Field | Type | Always present | Description |
|---|---|---|---|
operationId | string (uuid) | Yes | The operation's id, which the operation's state and result take. |
location | string (uri) | Yes | Where to ask about the operation. |
400. The request is not well formed, and nothing was started, changed or counted. errorCode is InvalidRequest, or InvalidPreview for a preview that is not available. A body member the operation does not document is refused this way, and the message names it and the documented member closest to it.
| Header | Description |
|---|---|
x-ms-request-id | The id of this request. Quote it to support. |
| Field | Type | Always present | Description |
|---|---|---|---|
errorCode | string | Yes | Each code keeps its meaning once published. New codes can be added over time, and a code is never reused. One of InvalidRequest, InvalidPreview, PayloadTooLarge, BenchmarkQuestionsMissing, OperationNotSupportedForItem, Unauthorized, TokenExpired, InsufficientScopes, AppOnlyTokenNotSupported, UserNotRegistered, AccountNotActive, AdminRoleRequired, FeatureNotInPlan, FeatureTurnedOff, LicenseNotYours, TrackedItemLimitReached, LicenseTrackedItemLimitReached, FabricConsentRequired, FabricAccessDenied, WorkspaceNotFound, ItemNotFound, AssessmentNotFound, RunNotFound, AbTestNotFound, OperationNotFound, ScheduleNotFound, AiProviderNotFound, AiCredentialNotFound, OperationInProgress, OperationHasNoResult, ResultNotReady, ScheduleConflict, AiProviderConflict, ItemChanged, CapacityPaused, OperationExpired, RegionNotReady, CapacityRequired, CapacityUnpaid, StoreNotConnected, RequestBlocked, AssessmentDailyLimitReached, BenchmarkRunsExhausted, OptimizationApplyDailyLimitReached, FirstLookLimitReached, BenchmarkBuildLimitReached, FabricUnavailable, StoreUnavailable, ThrottleStoreUnavailable, UnknownError. |
message | string | Yes | |
isRetriable | boolean | No | |
moreDetails | array of object | No | |
relatedResource | object or null | No | |
resourceId | string | No | |
resourceType | string | No | |
parameters | array of object | No | |
name | string | Yes | |
value | string | Yes | |
requestId | string (uuid) | Yes |
Errors
Every refusal is an ErrorResponse with a stable errorCode. See Errors for what each HTTP status means and every code the API can return.
This is an example of a refusal. Every refusal has the same fields.
HTTP/1.1 404 Not Found
Content-Type: application/json
x-ms-request-id: cbf21b6d-b661-4b52-88cb-d79712e504fc
{
"errorCode": "ItemNotFound",
"message": "No item with this id is visible to the signed-in person in this workspace, or it is not of the type the route takes.",
"isRetriable": false,
"moreDetails": [],
"relatedResource": {
"resourceId": "d972b3f5-a2fa-47ec-94ff-0403a4d159fa",
"resourceType": "SemanticModel"
},
"parameters": [
{
"name": "itemId",
"value": "d972b3f5-a2fa-47ec-94ff-0403a4d159fa"
}
],
"requestId": "cbf21b6d-b661-4b52-88cb-d79712e504fc"
} Example
curl -i -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"semanticModelIds": [
"<uuid>"
]
}' \
"https://api.bipixie.com/v1/workspaces/$WORKSPACE_ID/aiReadiness/assess" An example of what the call answers. The values are fictional.
HTTP/1.1 202 Accepted
Content-Type: application/json
Location: https://api.bipixie.com/v1/operations/cd57b041-e44a-4dda-a4ff-02935ffb8c04
x-ms-operation-id: cd57b041-e44a-4dda-a4ff-02935ffb8c04
Retry-After: 5
{
"operationId": "cd57b041-e44a-4dda-a4ff-02935ffb8c04",
"location": "https://api.bipixie.com/v1/workspaces/e17c1b59-7a2e-491e-acdd-11434854bbb0/aiReadiness/assess"
} Assess a semantic model #
POST /v1/workspaces/{workspaceId}/semanticModels/{semanticModelId}/aiReadiness/assess
Starts an assessment of a semantic model and answers with the operation to ask about. The request has no body. The assessment is the one the BI Pixie portal runs: it is counted against the day's assessments, it is stored where the account keeps its results, and it appears in the portal with every other assessment.
The first assessment of a semantic model is a first look. A later assessment of the same semantic model makes it a tracked item, and the operation's allowanceImpact says so.
BI Pixie looks up the workspace and the semantic model as the signed-in person before anything is counted. An id that person cannot see answers 404 or 403 and spends nothing.
The score is weighted by how the semantic model is used when the signed-in person has granted BI Pixie permission to read usage. When they have not, the assessment still runs without usage, and usage in the result says ConsentRequired, names the permission, says in message what the score is missing because of it, and links to the page where it is granted.
- Scope
- BIPixie.ReadWrite.All
- Plan
- Every plan
- Counts against
- Calls that start work, 30 a minute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceId | path | string (uuid) | Yes | The id of the Fabric workspace. |
semanticModelId | path | string (uuid) | Yes | The id of the semantic model in that workspace. |
Responses
202. The assessment was started. The body carries the operation's id and address.
| Header | Description |
|---|---|
x-ms-request-id | The id of this request. Quote it to support. |
x-ms-operation-id | The id of the operation. |
Location | The address of the operation's state. |
Retry-After | Seconds to wait before asking for the operation's state. |
To follow the work this call started, see Follow a long-running operation.
| Field | Type | Always present | Description |
|---|---|---|---|
operationId | string (uuid) | Yes | The operation's id, which the operation's state and result take. |
location | string (uri) | Yes | Where to ask about the operation. |
400. The request is not well formed, and nothing was started, changed or counted. errorCode is InvalidRequest, or InvalidPreview for a preview that is not available. A body member the operation does not document is refused this way, and the message names it and the documented member closest to it.
| Header | Description |
|---|---|
x-ms-request-id | The id of this request. Quote it to support. |
| Field | Type | Always present | Description |
|---|---|---|---|
errorCode | string | Yes | Each code keeps its meaning once published. New codes can be added over time, and a code is never reused. One of InvalidRequest, InvalidPreview, PayloadTooLarge, BenchmarkQuestionsMissing, OperationNotSupportedForItem, Unauthorized, TokenExpired, InsufficientScopes, AppOnlyTokenNotSupported, UserNotRegistered, AccountNotActive, AdminRoleRequired, FeatureNotInPlan, FeatureTurnedOff, LicenseNotYours, TrackedItemLimitReached, LicenseTrackedItemLimitReached, FabricConsentRequired, FabricAccessDenied, WorkspaceNotFound, ItemNotFound, AssessmentNotFound, RunNotFound, AbTestNotFound, OperationNotFound, ScheduleNotFound, AiProviderNotFound, AiCredentialNotFound, OperationInProgress, OperationHasNoResult, ResultNotReady, ScheduleConflict, AiProviderConflict, ItemChanged, CapacityPaused, OperationExpired, RegionNotReady, CapacityRequired, CapacityUnpaid, StoreNotConnected, RequestBlocked, AssessmentDailyLimitReached, BenchmarkRunsExhausted, OptimizationApplyDailyLimitReached, FirstLookLimitReached, BenchmarkBuildLimitReached, FabricUnavailable, StoreUnavailable, ThrottleStoreUnavailable, UnknownError. |
message | string | Yes | |
isRetriable | boolean | No | |
moreDetails | array of object | No | |
relatedResource | object or null | No | |
resourceId | string | No | |
resourceType | string | No | |
parameters | array of object | No | |
name | string | Yes | |
value | string | Yes | |
requestId | string (uuid) | Yes |
Errors
Every refusal is an ErrorResponse with a stable errorCode. See Errors for what each HTTP status means and every code the API can return.
This is an example of a refusal. Every refusal has the same fields.
HTTP/1.1 404 Not Found
Content-Type: application/json
x-ms-request-id: cbf21b6d-b661-4b52-88cb-d79712e504fc
{
"errorCode": "ItemNotFound",
"message": "No item with this id is visible to the signed-in person in this workspace, or it is not of the type the route takes.",
"isRetriable": false,
"moreDetails": [],
"relatedResource": {
"resourceId": "d972b3f5-a2fa-47ec-94ff-0403a4d159fa",
"resourceType": "SemanticModel"
},
"parameters": [
{
"name": "itemId",
"value": "d972b3f5-a2fa-47ec-94ff-0403a4d159fa"
}
],
"requestId": "cbf21b6d-b661-4b52-88cb-d79712e504fc"
} Example
curl -i -X POST \
-H "Authorization: Bearer $TOKEN" \
"https://api.bipixie.com/v1/workspaces/$WORKSPACE_ID/semanticModels/$SEMANTIC_MODEL_ID/aiReadiness/assess" An example of what the call answers. The values are fictional.
HTTP/1.1 202 Accepted
Content-Type: application/json
x-ms-request-id: cbf21b6d-b661-4b52-88cb-d79712e504fc
x-ms-operation-id: cd57b041-e44a-4dda-a4ff-02935ffb8c04
Location: https://api.bipixie.com/v1/operations/cd57b041-e44a-4dda-a4ff-02935ffb8c04
Retry-After: 5
{
"operationId": "cd57b041-e44a-4dda-a4ff-02935ffb8c04",
"location": "https://api.bipixie.com/v1/workspaces/e17c1b59-7a2e-491e-acdd-11434854bbb0/semanticModels/f1fdc461-3ca1-4702-ae48-afc3522409fc/aiReadiness/assess"
} List the assessments of a semantic model #
GET /v1/workspaces/{workspaceId}/semanticModels/{semanticModelId}/aiReadiness/assessments
Returns the stored assessments of a semantic model, newest first. Each one says whether it can be compared with the assessment before it. A semantic model with no stored assessment answers an empty list.
- Scope
- BIPixie.Read.All
- Plan
- Every plan
- Counts against
- Calls that read, 300 a minute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceId | path | string (uuid) | Yes | The id of the Fabric workspace. |
semanticModelId | path | string (uuid) | Yes | The id of the semantic model in that workspace. |
maxResults | query | integer | No | The largest number of rows to return in one page. |
continuationToken | query | string | No | The token the previous page answered with. |
Responses
200. One page of assessments.
| Header | Description |
|---|---|
x-ms-request-id | The id of this request. Quote it to support. |
| Field | Type | Always present | Description |
|---|---|---|---|
value | array of AssessmentSummary | Yes | |
assessmentId | string | Yes | |
assessedAtUtc | string or null (date-time) | No | |
score | number or null | No | |
scoreDataAgent | number or null | No | |
findingsCount | integer or null | No | |
regimeId | string | Yes | |
usageInScoring | boolean or null | No | Whether the way the semantic model is used took part in the score. |
comparableWithPrevious | boolean | No | Whether this assessment and the one before it were produced by the same scoring rules. False for the first assessment. |
continuationToken | string | No | |
continuationUri | string (uri) | No |
Errors
Every refusal is an ErrorResponse with a stable errorCode. See Errors for what each HTTP status means and every code the API can return.
This is an example of a refusal. Every refusal has the same fields.
HTTP/1.1 404 Not Found
Content-Type: application/json
x-ms-request-id: cbf21b6d-b661-4b52-88cb-d79712e504fc
{
"errorCode": "ItemNotFound",
"message": "No item with this id is visible to the signed-in person in this workspace, or it is not of the type the route takes.",
"isRetriable": false,
"moreDetails": [],
"relatedResource": {
"resourceId": "d972b3f5-a2fa-47ec-94ff-0403a4d159fa",
"resourceType": "SemanticModel"
},
"parameters": [
{
"name": "itemId",
"value": "d972b3f5-a2fa-47ec-94ff-0403a4d159fa"
}
],
"requestId": "cbf21b6d-b661-4b52-88cb-d79712e504fc"
} Example
curl -i -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.bipixie.com/v1/workspaces/$WORKSPACE_ID/semanticModels/$SEMANTIC_MODEL_ID/aiReadiness/assessments" An example of what the call answers. The values are fictional.
HTTP/1.1 200 OK
Content-Type: application/json
x-ms-request-id: cbf21b6d-b661-4b52-88cb-d79712e504fc
{
"value": [
{
"assessmentId": "63654520-134e-4565-8a3f-030a1ae0eba7",
"assessedAtUtc": "2026-09-14T09:30:05Z",
"score": 78,
"scoreDataAgent": 78,
"findingsCount": 12,
"regimeId": "aa6d9e39-ee9e-46d8-a9d4-089f050ea78e",
"usageInScoring": true,
"comparableWithPrevious": true
}
],
"continuationToken": "eyJza2lwIjoxMDB9",
"continuationUri": "https://api.bipixie.com/v1/workspaces/e17c1b59-7a2e-491e-acdd-11434854bbb0/semanticModels/f1fdc461-3ca1-4702-ae48-afc3522409fc/aiReadiness/assessments?continuationToken=eyJza2lwIjoxMDB9"
} Get an assessment #
GET /v1/workspaces/{workspaceId}/semanticModels/{semanticModelId}/aiReadiness/assessments/{assessmentId}
Returns one stored assessment, whole. The assessment is read from where the account keeps its results. An id that is not an assessment of this semantic model in this account answers 404.
- Scope
- BIPixie.Read.All
- Plan
- Every plan
- Counts against
- Calls that read, 300 a minute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspaceId | path | string (uuid) | Yes | The id of the Fabric workspace. |
semanticModelId | path | string (uuid) | Yes | The id of the semantic model in that workspace. |
assessmentId | path | string | Yes | The assessmentId from a list of assessments or from a result. |
Responses
200. The assessment.
| Header | Description |
|---|---|
x-ms-request-id | The id of this request. Quote it to support. |
| Field | Type | Always present | Description |
|---|---|---|---|
assessmentId | string or null | Yes | The id of the stored assessment. Null when the assessment was not stored. |
workspaceId | string or null | No | |
workspaceName | string or null | No | |
semanticModelId | string or null | Yes | |
semanticModelName | string or null | No | |
assessedAtUtc | string or null (date-time) | No | When the assessment was taken. Null when the assessment was not stored. |
score | number or null | Yes | The AI Readiness score, from 0 to 100. |
scoreDataAgent | number or null | No | The score as a data agent reads the semantic model. |
findingsCount | integer or null | Yes | |
usage | object | Yes | Whether the way the semantic model is used weighted the score. |
applied | boolean | Yes | Whether the account had usage to weight the score with. |
state | string or null | No | |
reason | string or null | No | |
windowDays | integer or null | No | The number of days of usage the score was measured over. |
trackedReportCount | integer or null | No | |
access | string | No | Whether BI Pixie could read usage as the signed-in person. Granted, ConsentRequired when the person has not granted the permission, or Unavailable when Microsoft did not answer. Present on the result of an operation, which is where it is known. One of Granted, ConsentRequired, Unavailable. |
permission | string | No | The permission usage is read with, Dataset.Read.All. Present with ConsentRequired and Unavailable. |
message | string | No | Why usage was not read, what the score is missing because of it, and what to do. Present with ConsentRequired and Unavailable. |
consentUrl | string (uri) | No | Where the permission is granted. Present with ConsentRequired. Its grant query parameter names the permission. |
regime | object | Yes | Which scoring rules produced the score. Two scores are comparable only when their id is the same. |
id | string | Yes | |
usageInScoring | boolean or null | No | |
comparableWithPrevious | boolean | No | True when an earlier assessment of this semantic model exists and was produced by the same scoring rules. False otherwise, including for the first assessment. |
stored | object | Yes | |
location | string | Yes | Where the assessment is kept. BIPixie, CustomerOneLake or CustomerStorage for an account that keeps its results in its own storage, Unknown when that could not be read, and None when the assessment was not stored. One of BIPixie, CustomerOneLake, CustomerStorage, Unknown, None. |
reason | string or null | No | Why the assessment was not stored. |
deliveryPending | boolean | Yes | Whether the assessment is waiting to be delivered to the account's own storage. |
document | object | Yes | The assessment as stored. report.overall_score, report.dimensions and report.findings hold the score, the score of each dimension and the findings. A finding has no id. Its key is its dimension, table and object_name together. |
schemaVersion | integer | Yes |
Errors
Every refusal is an ErrorResponse with a stable errorCode. See Errors for what each HTTP status means and every code the API can return.
This is an example of a refusal. Every refusal has the same fields.
HTTP/1.1 404 Not Found
Content-Type: application/json
x-ms-request-id: cbf21b6d-b661-4b52-88cb-d79712e504fc
{
"errorCode": "ItemNotFound",
"message": "No item with this id is visible to the signed-in person in this workspace, or it is not of the type the route takes.",
"isRetriable": false,
"moreDetails": [],
"relatedResource": {
"resourceId": "d972b3f5-a2fa-47ec-94ff-0403a4d159fa",
"resourceType": "SemanticModel"
},
"parameters": [
{
"name": "itemId",
"value": "d972b3f5-a2fa-47ec-94ff-0403a4d159fa"
}
],
"requestId": "cbf21b6d-b661-4b52-88cb-d79712e504fc"
} Example
curl -i -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.bipixie.com/v1/workspaces/$WORKSPACE_ID/semanticModels/$SEMANTIC_MODEL_ID/aiReadiness/assessments/$ASSESSMENT_ID" An example of what the call answers. The values are fictional.
HTTP/1.1 200 OK
Content-Type: application/json
x-ms-request-id: cbf21b6d-b661-4b52-88cb-d79712e504fc
{
"assessmentId": "63654520-134e-4565-8a3f-030a1ae0eba7",
"workspaceId": "e17c1b59-7a2e-491e-acdd-11434854bbb0",
"workspaceName": "Contoso Sales Analytics",
"semanticModelId": "f1fdc461-3ca1-4702-ae48-afc3522409fc",
"semanticModelName": "Contoso Sales",
"assessedAtUtc": "2026-09-14T09:30:05Z",
"score": 78,
"scoreDataAgent": 78,
"findingsCount": 12,
"usage": {
"applied": true,
"state": "available",
"reason": "Not available for this item.",
"windowDays": 28,
"trackedReportCount": 12,
"access": "Granted",
"permission": "ConsentRequired",
"message": "ConsentRequired",
"consentUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?client_id=ebc40edd-1874-4e14-a1e5-e21b45f6286a&response_type=code"
},
"regime": {
"id": "3f4bc9c2-b27e-49df-9de1-a78801b93655",
"usageInScoring": true,
"comparableWithPrevious": true
},
"stored": {
"location": "BIPixie",
"reason": "Not available for this item.",
"deliveryPending": true
},
"document": {
"schemaVersion": 3
}
}