Forum Discussion
Power BI Schedule Refresh
Hi Microsoft Support Team,
i am facing issue with the Power BI semantic model refresh. the semantic model refresh is triggered through an Azure Data Factory (ADF) pipeline using Logic Apps and the API . ADF pipeline runs successfully and it shows that the Power BI semantic model refresh request was successful however, the refresh is not appearing in the Power BI Refresh History
Hello powerbiexpert22,
I will begin with the response the Power BI API actually returns. A green tick in ADF doesn’t always mean the refresh has started. The refresh call is asynchronous, so if you get a 202 Accepted back, you can use the request details in that response to track it.
It’s also worth checking the Refresh History API using the same Workspace ID and Semantic Model ID. If nothing shows up there, compare the IDs and look at what the Logic App is actually returning.Refresh history: Datasets - Get Refresh History In Group
6 Replies
- v-saisrao-msft
Community Support
HI powerbiexpert22,
Have you had a chance to review the solution shared by mh2587 Olufemi7 jubinsoni ShivekMaharaj? If the issue persists, feel free to reply so we can help further.
Thank you.
- mh2587
Super User
The issue is likely occurring between the ADF/Logic App API call and the actual Power BI refresh execution. ADF showing successful only confirms that the API request was accepted, not necessarily that the semantic model refresh started. First, check the HTTP status code and response from the Power BI API, then verify the refresh directly using the Power BI Refreshes API for the same Workspace ID and Semantic Model ID. This will confirm whether the request is actually being registered by Power BI or being lost before execution.
- Olufemi7
Super User
Hello powerbiexpert22,
I will begin with the response the Power BI API actually returns. A green tick in ADF doesn’t always mean the refresh has started. The refresh call is asynchronous, so if you get a 202 Accepted back, you can use the request details in that response to track it.
It’s also worth checking the Refresh History API using the same Workspace ID and Semantic Model ID. If nothing shows up there, compare the IDs and look at what the Logic App is actually returning.Refresh history: Datasets - Get Refresh History In Group
- jubinsoni
Memorable Member
Hi powerbiexpert22, building on what was already suggested, a few extra things are worth checking on the Logic App side. The refresh API returns 202 Accepted when the request is queued, and that is all ADF sees as success. The real outcome is only visible by polling the refresh using the request ID returned in the response headers, so add an Until loop in the Logic App that calls the Get Refresh History endpoint and fails the pipeline if the status is Failed or Cancelled. Also confirm the Logic App is calling the right workspace and semantic model ID, since an ID from a dev workspace with the same name is a very common cause of a refresh that seems to disappear. If you call it with a service principal or managed identity, make sure it is a member of that workspace and that the tenant setting allowing service principals to use the Power BI APIs is on. On shared capacity the API refresh limit per day is also lower than on Premium or Fabric capacity, and requests over that limit can be rejected, so check the response body and not only the status code. Finally, if the request body includes enhanced refresh options such as type, commitMode or objects, those refreshes can show up differently from a normal one, so try a plain empty body POST first to rule that out and see whether it appears in the Refresh history list.
AI-assisted drafting: AI was used to help structure and phrase this response. I reviewed and validated the technical content before posting.
- ShivekMaharaj
Community Champion
Hi powerbiexpert22,
I agree with the previous replies, but one thing I would add is to track the specific refresh request returned by Power BI rather than only checking whether the POST returned success.
When Power BI accepts the refresh request, Microsoft documents that the response includes:
x-ms-request-id LocationThe Location header points to that exact refresh execution.
Microsoft documents the refresh request here in the Refresh Dataset API.
So I would have the Logic App capture the Location header immediately after the POST and then poll that URL until the refresh reaches a terminal state.
The refresh execution details API returns:
202 while the refresh is still running 200 once the refresh has completed or failed and the response body includes the actual refresh status and error details.That gives you a much more reliable flow:
POST refresh -> capture Location / request ID -> poll refresh execution -> continue only when status = Completed -> fail the Logic App if the refresh returns Failed or CancelledI would also compare the workspace ID and semantic model ID in that Location URL with the item you expect to refresh. That quickly rules out the common case where the API call is valid but is targeting a different semantic model.
The general refresh history endpoint is still useful for troubleshooting, but tracking the exact request returned by the POST is more deterministic when the refresh is being orchestrated from ADF or Logic Apps.
AI-assisted drafting: AI was used to help structure and phrase this response. I reviewed and validated the technical content before posting.
- v-saisrao-msft
Community Support
HI powerbiexpert22,
Checking in to see if your issue has been resolved. let us know if you still need any assistance.
Thank you.