Power BI API Connector Guide

The Power BI connector helps Tealfabric workflows push data into Power BI and retrieve reporting assets such as workspaces, datasets, and reports. It is commonly used for automated BI refresh pipelines, operational dashboard updates, and reporting governance workflows.

Document information
FieldValue
Canonical URL/docs/04_connecting-systems/connectors/p/power-bi
Version (published date)2026-05-08
Tagsconnectors, reference, power-bi
Connector IDpower-bi-1.0.0

Power BI connector flow showing OAuth-authenticated dataset writes, workspace and report retrieval, and workflow-driven analytics automation.

Configuration and OAuth setup

Configure the connector with Azure AD application credentials so it can obtain and refresh tokens for Power BI API access. Ensure the app has the required Power BI scopes and tenant permissions before enabling production workflows.

  • client_id (required): Azure AD application ID.
  • client_secret (required): application secret.
  • redirect_uri (required): OAuth callback URI.
  • access_token (optional): active OAuth token.
  • refresh_token (optional): token refresh value.
  • scope (optional): requested API scopes.
  • timeout_seconds (optional): request timeout value.

For enterprise setups, align app permissions with workspace-level access policies and service principal governance rules.

Push dataset rows with send

Use send when workflows need to update Power BI datasets with fresh operational data. Batch row pushes are recommended for better API efficiency and lower request overhead.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function pushDatasetRows(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "send",
      endpoint: "groups/<ENTITY_ID>/datasets/<ENTITY_ID>/tables/SalesMetrics/rows",
      method: "POST",
      data: {
        rows: [
          {"Date": "2026-05-08", "Region": "EMEA", "Revenue": 18250.42},
          {"Date": "2026-05-08", "Region": "NA", "Revenue": 14390.15}
        }
      }
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  return response.json();
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "send",
    "endpoint": "groups/<ENTITY_ID>/datasets/<ENTITY_ID>/tables/SalesMetrics/rows",
    "method": "POST",
    "data": {
      "rows": [
        {"Date": "2026-05-08", "Region": "EMEA", "Revenue": 18250.42},
        {"Date": "2026-05-08", "Region": "NA", "Revenue": 14390.15}
      ]
    }
  }'
{
  "success": true,
  "data": {
    "message_count": 1,
    "data": {
      "status": "accepted"
    },
    "response": {
      "status": "accepted"
    }
  }
}

Retrieve analytics assets with receive

Use receive to list workspaces, datasets, and reports for governance checks or reporting automation. Query-scoped retrieval helps workflows stay efficient in large Power BI tenants.

const baseUrl = "https://api.example.com/api/v1";
const tenantId = "<TENANT_ID>";
const apiKey = "<API_KEY>";

async function listWorkspaceReports(integrationId: string) {
  const response = await fetch(`${baseUrl}/integrations/${encodeURIComponent(integrationId)}/execute`, {
    method: "POST",
    headers: {
      "X-API-Key": apiKey,
      "X-Tenant-ID": tenantId,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      operation: "receive",
      endpoint: "groups/<ENTITY_ID>/reports",
      query: {
        "top": 20
      }
    }),
  });
  if (!response.ok) throw new Error(`Request failed: ${response.status}`);
  const payload = await response.json();
  return payload.data?.data ?? [];
}
curl -X POST "https://api.example.com/api/v1/integrations/<ENTITY_ID>/execute" \
  -H "X-API-Key: <API_KEY>" \
  -H "X-Tenant-ID: <TENANT_ID>" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "receive",
    "endpoint": "groups/<ENTITY_ID>/reports",
    "query": {
      "$top": 20
    }
  }'
{
  "success": true,
  "data": {
    "message_count": 2,
    "total_size": 2,
    "data": [
      {"id": "rpt-1001", "name": "Executive KPI Dashboard"},
      {"id": "rpt-1002", "name": "Regional Sales Overview"}
    ]
  }
}

Validate connectivity with test

Use test to confirm OAuth tokens and workspace access. Unlike send/receive/sync/batch, test validates client_id, client_secret, and redirect_uri before calling GET groups.

{
  "success": true,
  "data": {
    "message": "Power BI connection test successful",
    "details": {
      "api_base_url": "https://api.powerbi.com/v1.0/myorg"
    }
  }
}

Reliability guidance

Most Power BI integration failures come from expired tokens, missing workspace permissions, or aggressive push/read frequencies that trigger throttling. Validate access with test, enforce retries for transient API failures, and batch row pushes to reduce request pressure.

These practices keep BI automation stable while preserving report freshness.

Additional resources