Get certified for free when you join Fabric Data Days 2026 and dive into Fabric, Power BI, SQL, AI, and other essential data skills.
Join nowJuly 7 - July 17 | Round 2 of the Power BI Dataviz World Championships. Don't miss your chance! Learn more
I've looked through all the forums I've found, but I haven't seen a solution.
The problem is that I am using the given code:
$curlPostToken = curl_init();
$clientId = "******";
$clientSecretId = "******";
$tenantId = "******";
$workspace = "******";
$ReportId = "******";
curl_setopt_array($curlPostToken, array(
CURLOPT_URL => "https://login.microsoftonline.com/$tenantId/oauth2/token",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => array(
'grant_type' => 'client_credentials',
'scope' => '.default',
'resource' => 'https://analysis.windows.net/powerbi/api',
'tenant_id' => $tenantId,
'client_id' => $clientId, // Registered App Application ID
'client_secret' => $clientSecretId,
)
));
$tokenResponse = curl_exec($curlPostToken);
$tokenError = curl_error($curlPostToken);
echo $tokenError;
// decode result, and store the access_token in $embeddedToken variable:
$tokenResult = json_decode($tokenResponse, true);
$token = $tokenResult["access_token"];
$bearerToken = "Bearer " . ' ' . $token;
$post_params = array(
"reports" => Array(
Array('id'=>$ReportId),
),
"accessLevel"=>"View",
);
$payload = json_encode($post_params);
$headers = array(
"Content-Type: application/json",
"Authorization: Bearer $access_token"
);
$url = "https://api.powerbi.com/v1.0/myorg/groups/$workspace/reports/$ReportId/GenerateToken";
$ch2 = curl_init( $url );
curl_setopt( $ch2, CURLINFO_HEADER_OUT, true);
curl_setopt( $ch2, CURLOPT_POSTFIELDS, $payload);
curl_setopt( $ch2, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch2, CURLOPT_FAILONERROR, true);
$response = curl_exec( $ch2 );
if (curl_errno($ch2)) {
$error_msg = curl_error($ch2);
}
echo $response;
curl_close($ch2);
if (isset($error_msg)) {
echo $error_msg;
}
Added application as (service principal).
Issued permissions.
Added a service principal to Power Bi Workspace Access.
But no matter what I do, no matter how I twist the settings, I always get an error: The requested URL returned error: 403
I'm already crazy about this problem.
Help me 😞
Join us in Barcelona for FabCon and SQLCon, the Fabric, Power BI, SQL, and AI community event. Save €200 with code FABCMTY200.
Join Fabric Data Days 2026: 60 days of free live/on-demand sessions, challenges, study groups, and certification opportunities.