Forum Discussion
403 Forbidden on Power BI REST API “Refresh Dataset” – Service Principal Permissions with Power BI P
- Anonymous1 year ago
Hi MalaSun
Thanks a lot for the detailed explanation it's clear. To directly address your main issue.
Even though your service principal has the right permission (Dataset.ReadWrite.All) and you’ve added it as a Contributor to the workspace the reason you're hitting a 403 error is because. Dataset refresh via service principal is only supported in Premium or PPU (Premium Per User) workspaces. This means that with your current Pro trial license and non-Premium workspace, the Power BI REST API won't allow a service principal to trigger a dataset refresh. That’s a limitation by design from Microsoft, not something misconfigured on your end.
We have two clean options
- Upgrade the workspace to Premium or PPU:
- If you're using Fabric Trial, try assigning the workspace to a Premium capacity (like trial F64 or any A SKU).
- Or enable PPU (Premium Per User) on your account and workspace.
Once that’s done, your existing service principal setup should start working perfectly.
- Temporary workaround Use a Power BI user account (aka "master user") with a Pro license to trigger the refresh instead of a service principal.
- This works in Pro workspaces but isn’t ideal long-term, especially from a security/automation point of view.
Hope this clears up the mystery behind the 403.
If this response helps, consider marking it as “Accept as solution” and giving a “kudos” to assist other community members.
Regards,
Akhil.
I am building a Python web application that lets users upload their own cash flow data (CSV), which then triggers a refresh of a Power BI dataset via the Power BI REST API.
VBI (very bad idea). Your users with thrash the Power BI service with concurrent refresh requests. Best case you will get a 429 back, worst case you'll choke the capacity. Do not allow your report users to initiate semantic model refreshes.
- MalaSun1 year agoFrequent Visitor
Hi Ibendin,
Thank you for your comments. What alternative solutions could you recommend for what I wanted to achieve?