Forum Discussion
API authentication error on scheduled refresh
- 3 months ago
Hi Rabi , Your M query looks correct, so the issue is probably no longer the Web.Contents syntax itself. Since the error still occurs when creating the connection in the Service, Power BI is likely failing the datasource validation against the API endpoint rather than the refresh query.
Many APIs require the custom headers (X-Api-Key and X-Tenant) on every request, but Power BI Service test connection does not always include those headers during validation. Check whether the API root URL can be accessed without headers, if there are any firewall/IP restrictions blocking Power BI Service and whether Skip test connection can be enabled in your tenant/gateway settings. If the API only works when those headers are present, you may ultimately need a custom connector or gateway-based approach because some header-authenticated APIs do not validate cleanly with anonymous web connections in the Service.
Skip Test Connection for On-premises and Cloud Dat... - Microsoft Fabric Community
Hello
This happens because Power BI Service handles Web.Contents() authentication differently from Desktop.
Even though the API key is passed in headers, the Service often blocks scheduled refresh when the URL is treated as a dynamic data source.
The fix is usually to:
Keep the base URL static
Move the dynamic part into RelativePath
Set credentials to Anonymous
Avoid hardcoding changing URL segments directly in Web.Contents
Use this pattern instead:
let
BaseUrl = "https://api.csassurance.com/",
Source =
Json.Document(
Web.Contents(
BaseUrl,
[
RelativePath = "api/v2/reports/ReportUUIDHere/snapshot",
Headers = [
#"X-Api-Key" = "APIHere",
#"X-Tenant" = "ABC"
]
]
)
)
in
SourceThen in Power BI Service:
Go to Dataset Settings
Data source credentials
Set authentication to:
Anonymous
Privacy level = Public (or Organizational)
This works because Power BI Service can validate a fixed root domain (https://api.csassurance.com/) during scheduled refresh. Directly embedding the full URL inside Web.Contents() often causes refresh failures in the Service even if Desktop works fine.