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
    Most 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
        Most 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.