Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
1 year ago

Subscribing Power BI reports through API

Hi All,

I am trying to do subscribing reports through REST API. But i am not able to do it through API. I knew we can make through Power Automate and in my case i need to do from API end. Is there any solution?

https://learn.microsoft.com/en-us/rest/api/power-bi-report/subscriptions  --- these existing api is not working as expected. Anyother ideas?  

9 Replies

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi felaray 
      Any others ideas apart from power automate?

       

      • felaray's avatar
        felaray
        Frequent Visitor

        It is not related to Power Automate, but rather to the Power BI API. I am unable to make calls using Postman because Microsoft has not made the relevant API available.

  • Expiscornovus's avatar
    Expiscornovus
    Icon for Most Valuable Professional rankMost Valuable Professional

    Hi Anonymous,

     

    When you say, it doesn't work as expected, what do you mean? Are you getting an error code?

     

    If so, can you share a screenshot of your current flow setup that is not working (or explain it in more detail)?

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi Expiscornovus 

      This is code i used for subcribing reports through API

      --Code--

      import requests
      import json

      # Define constants
      CLIENT_ID = '#######################'
      CLIENT_SECRET = '#######################'
      TENANT_ID = '#######################'
      RESOURCE = 'https://analysis.windows.net/powerbi/api'
      API_URL = 'https://api.powerbi.com/v1.0/myorg/groups/{GROUP_ID}/reports/{REPORT_ID}/subscriptions'

      def get_access_token():
      url = f'https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token'
      headers = {
      'Content-Type': 'application/x-www-form-urlencoded'
      }
      body = {
      'grant_type': 'client_credentials',
      'client_id': CLIENT_ID,
      'client_secret': CLIENT_SECRET,
      'scope': RESOURCE + '/.default'
      }
      response = requests.post(url, headers=headers, data=body)
      if response.status_code == 200:
      return response.json().get('access_token')
      else:
      print(f"Failed to obtain access token. Status Code: {response.status_code}, Response: {response.text}")
      return None

      def create_subscription(access_token, group_id, report_id):
      url = API_URL.format(GROUP_ID=group_id, REPORT_ID=report_id)
      headers = {
      'Authorization': f'Bearer {access_token}',
      'Content-Type': 'application/json'
      }
      data = {
      "displayName": "My Subscription",
      "schedule": {
      "frequency": "Daily",
      "timeZone": "Pacific Standard Time",
      "times": ["07:00"]
      },
      "status": "Enabled"
      }
      response = requests.post(url, headers=headers, json=data)
      if response.status_code == 201:
      print("Subscription created successfully.")
      else:
      print(f"Failed to create subscription. Status Code: {response.status_code}, Response: {response.text}")

      if __name__ == "__main__":
      # Replace with your workspace and report IDs
      GROUP_ID = '########################'
      REPORT_ID = '#######################'

      token = get_access_token()
      if token:
      create_subscription(token, GROUP_ID, REPORT_ID)

      Error 

      Failed to create subscription. Status Code: 404, Response: {
        "error":{
          "code":"","message":"No HTTP resource was found that matches the request URI}}
    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi Expiscornovus 

      The API you meantioned is not for creating subscription for power bi reports. I am not using postman though

      • Expiscornovus's avatar
        Expiscornovus
        Icon for Most Valuable Professional rankMost Valuable Professional

        Hi Anonymous,

         

        My bad, I missed that body payload with the schedule. I thought you were collecting/retrieving subscriptions from the existing report on the Power BI Online service.

         

        The link you were referring to in your opening post was a REST API call from Power BI report server (on-premise). Like felaray already mentioned, that method doesn't exist in the Online APIs.

    • felaray's avatar
      felaray
      Frequent Visitor

      Expiscornovus This is a read-only API that can retrieve subscription-related information. Unfortunately, it does not support write operations.