Capability Library · Pack detail

powerbi v1.0.0

Microsoft Power BI REST API on a customer workspace: read datasets, query them with DAX and read refresh history, trigger dataset refresh, delete datasets and reports, and grant workspace access.

Review state: draft· Not in the distributable release manifest

Release identity

SHA-256 of the pack file bytes: 6927a55a663511d01c38cf729d0642c110e629e3a78370869af8aea098b0a047

Not in the distributable release manifest. The binary carries a digest-bound manifest of the distributable library; a pack whose bytes differ from its manifest entry — endpoint, tier, allowlist, or credential edited, with provider, version, and review block preserved — fails the digest check, loses distributability, and renders MODIFIED rather than as the shipped reviewed artifact. Review state and artifact status are different facts: the first is a documentation-review declaration, the second is the identity of the exact bytes.

Capabilities (7)

powerbi.datasets.read v1.0.0R0

Action
read
Endpoint
GET https://api.powerbi.com/v1.0/myorg/groups/GROUP_ID/datasets
Connector
http
Custody
customer_vault
Credential ref
secret-ref-powerbi-bearer-token
Data class
internal

List the datasets in one workspace (Get Datasets In Group); this pack registers the collection read only — Get Dataset In Group and the datasources/parameters sub-reads are not registered. Microsoft's documentation notes that a caller with only Read permission receives a limited subset of dataset properties — a documented API behavior, not a restriction this pack imposes. GROUP_ID is a placeholder the deployment binds before enabling; api.powerbi.com is a real shared service host and is not substituted.

powerbi.dataset.execute_queries v1.0.0R0

Action
read
Endpoint
POST https://api.powerbi.com/v1.0/myorg/groups/GROUP_ID/datasets/DATASET_ID/executeQueries
Connector
http
Custody
customer_vault
Credential ref
secret-ref-powerbi-bearer-token
Data class
internal

Execute read-only DAX queries against one dataset (Execute Queries In Group). This is a POST-with-query-body endpoint used read-only: the documented body is a queries array of DAX query strings plus serializer settings, and the response is the query result rows — it changes nothing in the workspace and is registered read at the R0 floor. Body-shape note: the registration does not restrict the DAX text, so the read's breadth is whatever the caller queries within the dataset; the data returned is the dataset's own content, and the deployment's data classification for that content governs handling. Documented prerequisites from the fetched operation reference: the tenant setting 'Dataset Execute Queries REST API' (under Integration settings) must be enabled by the tenant administrator; the caller needs both Read and Build permissions on the dataset; and service principals are NOT supported for datasets with row-level security or SSO-enabled data sources — for this pack's service-principal credential those datasets fail closed. GROUP_ID and DATASET_ID are placeholders the deployment binds before enabling.

powerbi.dataset.refresh_history.read v1.0.0R0

Action
read
Endpoint
GET https://api.powerbi.com/v1.0/myorg/groups/GROUP_ID/datasets/DATASET_ID/refreshes
Connector
http
Custody
customer_vault
Credential ref
secret-ref-powerbi-bearer-token
Data class
internal

List the refresh history of one dataset (Get Refresh History In Group): refresh ids, types, start and end times and statuses — operational metadata about past refreshes, registered as a collection read. GROUP_ID and DATASET_ID are placeholders the deployment binds before enabling; api.powerbi.com is a real shared service host and is not substituted.

powerbi.dataset.refresh v1.0.0R3

Action
deploy
Endpoint
POST https://api.powerbi.com/v1.0/myorg/groups/GROUP_ID/datasets/DATASET_ID/refreshes
Connector
http
Custody
customer_vault
Credential ref
secret-ref-powerbi-bearer-token
Data class
internal

Trigger a refresh of one dataset (Refresh Dataset In Group). Registered with the deploy action at the R3 floor rather than as an ordinary execution: the refresh pulls from the underlying sources and rewrites the data every report and dashboard on the dataset serves — the content consumers see changes as a direct effect, which is deploy-equivalent, and deploy is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer); an irreversible action cannot be taken without a person. Body-shape note: an empty or notifyOption-only body is a standard refresh; any other field makes it an enhanced refresh, and the documented commitMode=partialBatch can leave the model partially loaded or a table empty after a failure — Microsoft advises transactional to preserve previous data. Documented capacity limits (at most eight refreshes per day on shared capacities) are honest limits, not restrictions this registration imposes. GROUP_ID and DATASET_ID are placeholders the deployment binds before enabling.

powerbi.dataset.delete v1.0.0R3

Action
delete
Endpoint
DELETE https://api.powerbi.com/v1.0/myorg/groups/GROUP_ID/datasets/DATASET_ID
Connector
http
Custody
customer_vault
Credential ref
secret-ref-powerbi-bearer-token
Data class
internal

Delete a dataset from the workspace (Delete Dataset In Group). Every report and dashboard tile built on the dataset loses its data connection, and recreating the dataset later is a new artifact, not an undo. Registered as delete at the R3 floor; delete is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer). GROUP_ID and DATASET_ID are placeholders the deployment binds before enabling.

powerbi.report.delete v1.0.0R3

Action
delete
Endpoint
DELETE https://api.powerbi.com/v1.0/myorg/groups/GROUP_ID/reports/REPORT_ID
Connector
http
Custody
customer_vault
Credential ref
secret-ref-powerbi-bearer-token
Data class
internal

Delete a report from the workspace (Delete Report In Group). Dashboards pinning its visuals and anyone consuming the report lose it; the documented success response is 200 with no recoverable artifact returned. Registered as delete at the R3 floor; delete is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer). GROUP_ID and REPORT_ID are placeholders the deployment binds before enabling.

powerbi.group.user.add v1.0.0R3

Action
share
Endpoint
POST https://api.powerbi.com/v1.0/myorg/groups/GROUP_ID/users
Connector
http
Custody
customer_vault
Credential ref
secret-ref-powerbi-bearer-token
Data class
pii

Grant a principal access to the workspace (Add Group User): the documented body names the principal (identifier or emailAddress — personal data, hence the pii class) and a groupUserAccessRight of Viewer, Contributor, Member or Admin. Registered as share at the R3 floor: this is an access grant over everything in the workspace, effective until a separate removal call — the grant cannot be un-granted by the call that made it, and share is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer). This registration does not restrict the body, so a request naming the Admin role is in scope; a reviewer who intends viewer-only grants must impose that in policy. Microsoft's documentation notes permission propagation is not immediate — a timing behavior, not a restriction. GROUP_ID is a placeholder the deployment binds before enabling.

Credential reference

The pack names a reference, never a secret. Installing a pack registers capabilities and makes them governable; registration is not connectivity. The credential is created at the provider and held in the client's own secret manager under the reference the pack names, and deployment testing is still required to show the credential path works and cannot be bypassed.

Reference
secret-ref-powerbi-bearer-token
Custody
customer_vault
Injection
header (Authorization)

A Microsoft Entra ID (Azure AD) access token for the Power BI API, held in the client's own secret manager. The stored material must be the complete Authorization header value: the scheme 'Bearer', one separating space, then the access token. Token issuance is external: the deployment's custody job obtains tokens from the Microsoft identity platform token endpoint (login.microsoftonline.com/{tenant}/oauth2/v2.0/token) using a confidential client — a service principal authenticating with client credentials and requesting the single scope 'https://analysis.windows.net/powerbi/api/.default' — and writes the resulting token under this reference before expiry. Authorization honesty, corrected: for service principals Microsoft recommends assigning NO Power BI API permission scopes on the app registration — the documented scopes (Dataset.ReadWrite.All, Workspace.ReadWrite.All and similar) are DELEGATED permissions for signed-in-user flows and are never used by a client-credentials service principal, so this pack does not prescribe them as the SP's governing permissions. The service principal's real authorization is (1) the tenant setting 'Allow service principals to use Power BI APIs', which the tenant administrator must enable (optionally scoped to a security group containing the SP), and (2) a workspace role — Member or Admin for the write operations — on each workspace it governs; workspace assignment is the real blast-radius control. Expiry and revocation: access tokens are short-lived (about an hour) and an expired value fails closed with a 401; the custody job must refresh proactively — the injector injects the stored value verbatim and performs no token lifecycle itself. Note carefully, distinguishing issuance from authorization: disabling the app registration stops NEW token issuance, but removing the service principal from a workspace does NOT block issuance — tokens keep being minted while the app registration lives, and workspace removal only means a (still bearer-valid) token's calls against that workspace fail authorization. Already-issued tokens are never invalidated by either step and remain usable until they expire, so the token lifetime is the effective revocation window. Least privilege: with no API scopes on the app registration, least privilege is exercised through workspace roles — add the service principal to only the workspaces this integration governs, with the minimum role that covers the enabled capabilities, and restrict the tenant setting's allowed security group to the group holding this SP. Executor hygiene: the value must live only in executor memory for the lifetime of a call, must never be written to logs, traces or diagnostics, and must not appear in crash dumps; a deployment that cannot meet that bar must not enable the pack.

Resources

  • powerbi-workspace (api, internal): https://api.powerbi.com/v1.0/myorg/groups/GROUP_ID
  • powerbi-workspace-users (api, pii): https://api.powerbi.com/v1.0/myorg/groups/GROUP_ID/users

Pack notes and exclusions

The endpoint host api.powerbi.com is a REAL shared service host — Microsoft's global Power BI API endpoint that serves every tenant — not a placeholder: do not substitute it, and do not treat its presence in the egress allowlist as an unsubstituted-pack marker. Tenant and data scoping come from the Microsoft Entra ID access token and the group (workspace) id in the path, not from the host. GROUP_ID, DATASET_ID and REPORT_ID in the paths are placeholders the deployment binds to concrete workspace and artifact ids before enabling; the /v1.0/myorg prefix is Power BI's documented tenant-relative root, and the registered capabilities address workspace-scoped operations only (My Workspace variants of the same operations are not registered). Tiering rationale: dataset refresh is registered with the deploy action at the R3 floor rather than as an ordinary execution — a refresh rewrites the data every report and dashboard built on the dataset serves to its consumers, which is deploy-equivalent; deploy is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer). Adding a principal to a workspace is registered as share at the R3 floor: it grants a user, group or service principal a workspace role up to Admin, and the grant is effective until a separate removal call — an access grant cannot be un-granted by the call that made it. Documented exclusions — this pack does not register: the Admin APIs (tenant-wide as-admin scans and metadata export — organization-wide surveillance scope, a separate governance review); Post Dataset User and Put Dataset User (direct dataset-level permission grants — share-class, pending review); Take Over In Group (transfers dataset ownership to the calling user — transfer-class); Bind To Gateway In Group, Update Datasources In Group and Set All Dataset Connections In Group (gateway binding and data-source credential operations — credential-adjacent writes requiring their own review); the push/streaming dataset row endpoints (PostRows and friends — direct row writes into datasets); report clone, export and import; dataflow refresh and transactions; and GenerateToken (embed-token issuance — a credential-issuance operation, not a business capability). A documented exclusion, not an approximated capability. The Execute Queries capability is a POST-with-query-body endpoint used read-only: its body carries a DAX query and it changes nothing — see the capability's own note. Capacity behaviors documented by Microsoft are honest limits, not restrictions this pack imposes: shared capacities accept at most eight refreshes per dataset per day, and an enhanced refresh whose commitMode is partialBatch can leave the model partially loaded after a failure — Microsoft's own documentation advises transactional mode to preserve previous data.

Review record

Draft review record dated 2026-09-21 · Reviewer: aaes-eng (an opaque id that resolves internally to the responsible reviewer)

A pack review is not a vendor or examiner attestation. A retrieval date says when a source page was read; it does not by itself establish what the page said then. No pack is vendor-endorsed, and none has been connectivity-tested against a live vendor tenant.