Account reference
The plan, its allowances and what this caller can do.
Every route below follows the conventions in Work with the BI Pixie API. You can also download the OpenAPI document.
Get the account #
GET /v1/account
Returns the plan, the account's status and region, and every allowance with what has been used and what the plan allows. It also says whether a call that starts work would be accepted from this caller right now and, when it would not, the errorCode it would meet. Reading the account spends no allowance.
- Scope
- BIPixie.Read.All
- Plan
- Every plan
- Counts against
- Calls that read, 300 a minute
Responses
200. The account.
| Header | Description |
|---|---|
x-ms-request-id | The id of this request. Quote it to support. |
| Field | Type | Always present | Description |
|---|---|---|---|
accountId | string | Yes | |
plan | string | Yes | |
status | string | Yes | |
region | string or null | No | |
allowances | Allowances | Yes | What the plan allows and what has been used. used is null when it could not be read. limit is null when the plan sets no limit. |
trackedItems | Allowance | Yes | |
used | integer or null | Yes | |
limit | integer or null | Yes | |
assessments | PeriodAllowance | Yes | |
used | integer or null | Yes | |
limit | integer or null | Yes | |
period | string | Yes | One of Day, Month, Lifetime, Unlimited. |
optimizationApplies | PeriodAllowance | Yes | |
used | integer or null | Yes | |
limit | integer or null | Yes | |
period | string | Yes | One of Day, Month, Lifetime, Unlimited. |
benchmarkRuns | PeriodAllowance | No | |
used | integer or null | Yes | |
limit | integer or null | Yes | |
period | string | Yes | One of Day, Month, Lifetime, Unlimited. |
firstLooks | Allowance | No | |
used | integer or null | Yes | |
limit | integer or null | Yes | |
scheduledAssessments | boolean | Yes | Whether the plan includes assessments that run on a schedule. |
settings | object | Yes | What an administrator of the account chose in Account settings. |
features | object | Yes | |
addPixies | boolean | Yes | Whether Pixies can be added to reports. While false, a call that adds Pixies answers 403 FeatureTurnedOff, and a call that removes Pixies is still accepted. |
capacityDetails | boolean | Yes | Whether BI Pixie reads capacities, to check whether one is paused and to list them for Admin Monitoring. |
aiFeatures | boolean | Yes | Whether AI Readiness, benchmarks, A/B tests and data agents are offered. While false, those routes answer 403 FeatureTurnedOff. |
definitionCopies | string | Yes | None, the usual value, when BI Pixie keeps no copy of report and semantic model definitions after adding, updating or removing Pixies. Keep30Days while BI Pixie support has turned on a 30-day copy for the account, at the account's request, to investigate a run that failed. An account whose data stays in its own tenant never gets a copy. One of Keep30Days, None. |
api | object | Yes | |
writesAllowed | boolean | Yes | Whether a call that starts work would be accepted from this caller now. |
writeRefusal | one of ErrorCode, null | Yes | The errorCode such a call would meet, or null when it would be accepted. |
scopes | array of string | Yes | |
role | string | Yes | One of admin, member. |
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/account" 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
{
"accountId": "4230a877-3802-46a8-b288-a30965e9009a",
"plan": "pro",
"status": "active",
"region": "eastus",
"allowances": {
"trackedItems": {
"used": 12,
"limit": 100
},
"assessments": {
"used": 12,
"limit": 100,
"period": "Day"
},
"optimizationApplies": {
"used": 12,
"limit": 100,
"period": "Day"
},
"benchmarkRuns": {
"used": 12,
"limit": 100,
"period": "Day"
},
"firstLooks": {
"used": 12,
"limit": 100
},
"scheduledAssessments": true
},
"settings": {
"features": {
"addPixies": true,
"capacityDetails": true,
"aiFeatures": true
},
"definitionCopies": "Keep30Days"
},
"api": {
"writesAllowed": true,
"writeRefusal": null,
"scopes": [
"BIPixie.Read.All",
"BIPixie.ReadWrite.All"
],
"role": "admin"
}
} List the permissions you have given BI Pixie #
GET /v1/account/permissions
The permissions BI Pixie asks for to act on your behalf, whether you have given each one, what each is for, and, for each one not given, the page in the BI Pixie portal that grants it. The first, Fabric, is needed by every call that reads or changes your workspaces, reports and semantic models; the other three are needed only for what each one names. BI Pixie asks Microsoft for each permission as you call, so the answer is as of now. Reading it spends nothing.
- Scope
- BIPixie.Read.All
- Plan
- Every plan
- Counts against
- Calls that read, 300 a minute
Responses
200. The permissions.
| Header | Description |
|---|---|
x-ms-request-id | The id of this request. Quote it to support. |
| Field | Type | Always present | Description |
|---|---|---|---|
value | array of Permission | Yes | |
name | string | Yes | The permission's key, the same in every answer. One of fabric, usage, storage, agent. |
permission | string | Yes | The permission as Microsoft names it, such as Dataset.Read.All. |
access | string | Yes | Granted when you have given it, ConsentRequired when you have not, and Unavailable when Microsoft did not answer or your organization's sign-in policy did not allow it just now. One of Granted, ConsentRequired, Unavailable. |
required | boolean | Yes | True for the one permission every call that reads Fabric needs. |
neededFor | string | Yes | What BI Pixie does with the permission, in a sentence. |
message | string or null | No | Why the permission is not available, in a sentence. Null when it is granted. |
consentUrl | string or null (uri) | No | The BI Pixie portal page that grants this permission. Null unless access is ConsentRequired. |
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/account/permissions" 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": [
{
"name": "fabric",
"permission": "Contoso Sales",
"access": "Granted",
"required": true,
"neededFor": "Contoso Sales",
"message": "The semantic model could not be read.",
"consentUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?client_id=ebc40edd-1874-4e14-a1e5-e21b45f6286a&response_type=code"
}
]
} List the account's licenses #
GET /v1/licenses
The account's licenses, as the portal's Licenses page lists them: every license for an account admin, and their own for a member. Each says the tracked items it holds and the tracked items allocated to it (null when the plan sets no allocation), how many members it has, its region, and where it keeps its results. An account holds a handful of licenses, so the list is never paged. Reading it spends nothing.
- Scope
- BIPixie.Read.All
- Plan
- Every plan
- Counts against
- Calls that read, 300 a minute
Responses
200. The licenses.
| Header | Description |
|---|---|
x-ms-request-id | The id of this request. Quote it to support. |
| Field | Type | Always present | Description |
|---|---|---|---|
value | array of License | Yes | |
licenseId | string | Yes | |
label | string or null | No | |
isDefault | boolean | Yes | Whether this is the account's primary license. |
status | string or null | No | |
region | string or null | No | The Azure region the license's data is processed in. |
provisioningStatus | string or null | No | |
trackedItems | object | Yes | |
used | integer or null | Yes | The tracked items this license holds. |
allocated | integer or null | Yes | The tracked items allocated to this license. Null when the plan sets no allocation. |
members | integer or null | No | How many members are on this license. |
dataResidency | object | Yes | |
location | string | Yes | Where the license keeps its results: BIPixie, CustomerOneLake, CustomerStorage, or Unknown when that could not be read. One of BIPixie, CustomerOneLake, CustomerStorage, Unknown. |
createdAtUtc | string or null (date-time) | 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/licenses" 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": [
{
"licenseId": "da8ba1ab-3ead-4748-9693-f27175096ee6",
"label": "With AI instructions",
"isDefault": true,
"status": "Active",
"region": "eastus",
"provisioningStatus": "Succeeded",
"trackedItems": {
"used": 12,
"allocated": 3
},
"members": 3,
"dataResidency": {
"location": "BIPixie"
},
"createdAtUtc": "2026-06-03T14:12:00Z"
}
]
} List the account's tracked items #
GET /v1/trackedItems
Every unit of the account's tracked-item count, named: the reports with Pixies, the semantic models and data agents BI Pixie tracks, and the ones since removed or deleted, because the count does not go down when an item goes and a number nobody can itemize reads as a mystery. An account whose plan sets no cap lists its active items only. An account admin sees every license's items and a member their own license's, as the portal's Usage tab shows them. Paged. Reading the list spends nothing.
- Scope
- BIPixie.Read.All
- Plan
- Every plan
- Counts against
- Calls that read, 300 a minute
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
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. The tracked items.
| Header | Description |
|---|---|
x-ms-request-id | The id of this request. Quote it to support. |
| Field | Type | Always present | Description |
|---|---|---|---|
value | array of TrackedItem | Yes | |
id | string or null | Yes | The report's, the semantic model's or the data agent's id. |
itemType | string or null | Yes | One of Report, SemanticModel, DataAgent. |
workspaceId | string or null | No | |
displayName | string or null | No | |
workspaceName | string or null | No | |
status | string | Yes | Tracked for an item BI Pixie tracks today. Removed for a report whose Pixies were removed, Deleted for one the customer deleted, and ResultsDeleted for a semantic model whose results were deleted: each still counts, because the count does not go down. One of Tracked, Removed, Deleted, ResultsDeleted. |
trackedSinceUtc | string or null (date-time) | No | When the item started counting. Null for a claim made before the time was recorded. |
deletedAtUtc | string or null (date-time) | No | |
licenseId | string or null | Yes | The license the item is assigned to. |
claimedVia | string or null | No | For a semantic model or data agent, what claimed it: readiness, assessment, agent_assessment or benchmark. Null for a report, and for a claim made before this was recorded. |
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/trackedItems" 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": [
{
"id": "3f4bc9c2-b27e-49df-9de1-a78801b93655",
"itemType": "Report",
"workspaceId": "e17c1b59-7a2e-491e-acdd-11434854bbb0",
"displayName": "Contoso Sales",
"workspaceName": "Contoso Sales Analytics",
"status": "Tracked",
"trackedSinceUtc": "2026-06-03T14:12:00Z",
"deletedAtUtc": "2026-09-14T09:42:17Z",
"licenseId": "da8ba1ab-3ead-4748-9693-f27175096ee6",
"claimedVia": "readiness"
}
],
"continuationToken": "eyJza2lwIjoxMDB9",
"continuationUri": "https://api.bipixie.com/v1/trackedItems?continuationToken=eyJza2lwIjoxMDB9"
}