Firebase Hosting deploy fails: 403 "Permission denied to get service [firebasehosting.googleapis.com]"
Request to https://serviceusage.googleapis.com/v1/projects/<project>/services/firebasehosting.googleapis.com had HTTP Error: 403, Permission denied to get service [firebasehosting.googleapis.com]
Short answer: firebase-tools 15.34.1 (22 October 2026) checks that the Hosting API is enabled before every Hosting deploy. A service account without the serviceusage.services.get permission now fails with this 403. Give it the Service Usage Consumer role, or pin firebase-tools to 15.34.0. 15.34.2 doesn't change it.
Why it happens
15.34.1 added a call to ensure() for the Hosting API in firebase deploy and in every hosting: command (channel:deploy, channel:create, sites:list and others). That call asks the Service Usage API whether firebasehosting.googleapis.com is enabled. The check() function in src/ensureApiEnabled.ts doesn't catch the error, so a 403 stops the command before anything deploys. The deploy service account that firebase init hosting:github creates has Hosting rights but no Service Usage role, so CI deploys that worked on 15.34.0 fail on 15.34.1. GitHub Actions pick up the new version without asking, because FirebaseExtended/action-hosting-deploy runs npx firebase-tools@latest. We checked the code change in the firebase-tools source on 31 October 2026. The issue is open with three reports, and pinning 15.34.0 got a deploy through for one of them.
You may also see
reason: AUTH_PERMISSION_DENIED, permission: serviceusage.services.get
Fix
- Check it's this: run
npx firebase-tools --version(or look at the CI log). 15.34.1 or newer plus the 403 above means it's the new API check. - Lasting fix: give the deploy service account the Service Usage Consumer role (
roles/serviceusage.serviceUsageConsumer). It includesserviceusage.services.get, and also.use, which the request needs because the CLI bills the call to your project. With gcloud:gcloud projects add-iam-policy-binding PROJECT_ID --member=serviceAccount:SA_EMAIL --role=roles/serviceusage.serviceUsageConsumer. Or use Console โ IAM โ the service account โ Grant access. Wait a few minutes for IAM to apply, then re-run. - Quick fix when you can't change IAM: pin the CLI to the last version without the check. Locally run
npx firebase-tools@15.34.0 deploy --only hosting; in package.json use"firebase-tools": "15.34.0". - In GitHub Actions with action-hosting-deploy (always the latest CLI), replace that step with a plain run step until it's fixed, for example
npx firebase-tools@15.34.0 hosting:channel:deploy pr-${{ github.event.number }} --expires 7d --project PROJECT_IDwithGOOGLE_APPLICATION_CREDENTIALSpointing at the same service-account key. - Re-run the deploy. With the role in place, the log shows
required API firebasehosting.googleapis.com is enabledbefore the upload.
Get it fixed: $49
Pay by card, no account needed. Pull request within 48 hours; build still failing, full refund.
Watch out
- One user reports that the Consumer role alone didn't help. Make sure it's granted on the same project the deploy targets, and to the account CI actually uses. If it still fails, pin 15.34.0.
- Don't grant Owner or Editor just for this. Consumer, or Viewer plus Consumer, is enough for the check.
- If you pin, remove the pin once a firebase-tools release handles the 403 (watch issue #11335), so you get security fixes such as the body-parser CVE fix in 15.34.2.
Sources
- firebase-tools issue #11335: hosting deploy fails with 403 on serviceusage.services.get since v15.34.1
- firebase-tools v15.34.1 release notes (22 Oct 2026): "Ensured the Firebase Hosting API is enabled before deploying"
- firebase-tools v15.34.0...v15.34.1: ensure() added to deploy and every hosting command
- firebase-tools v15.34.2 source: src/ensureApiEnabled.ts (check() does not catch the 403)
- Google Cloud: Service Usage access control (which roles include serviceusage.services.get / .use)
Other errors breaking soon
- Unable to display RD Web Access: Chrome 158 and Edge 159 turn off XSLT
- Windows KB5127648: 802.1X Wi-Fi, wired and VPN sign-in fails (NTLMv1 SSO blocked)
- Firebase: Runtime Node.js 20 was decommissioned
- AWS CodeBuild: Unknown runtime version named '20' of nodejs
- Google Cloud Python: non-supported Python version (3.10)
- Azure OpenAI o1, o3, o3-mini and o4-mini retire on 19 November 2026: 410 Gone
- OpenAI: "The model โฆ has been deprecated" or "Model not found" after a shutdown
- Contact Form 7 6.2: "Composer detected issues in your platform" (PHP 8.3 required)
- Biome 2.6: biome check fails on README.md and YAML files after the upgrade
- pytest 9.2: xdist_group tests run on different workers (--dist loadgroup)
- WordPress 7.2 ignores data-wp-init--, data-wp-watch-- and data-wp-run-- directives
- Ubuntu 26.04 upgrade stops with "Unable to upgrade MySQL" (mysql_native_password accounts)