Chrome Web Store
Chrome submissions go through the Chrome Web Store API v2 at chromewebstore.googleapis.com/v2. The platform runs the submission with the project's stored credentials; trigger it from the console's Stores tab, from an agent with extension_submit, or with POST /api/cli/stores/submit. See Publishing.
Credentials
The store accepts either a service account key or an OAuth client. A service account is the better default for a project, because it does not expire with a person's session.
The publisher ID is required on top of either. It is set in the project's Chrome store settings and is a UUID from the developer dashboard, not the extension ID.
| Value | Secret | Notes |
|---|---|---|
| Service account JSON | STORE_CHROME_SERVICE_ACCOUNT_JSON | Raw JSON, sufficient alone |
| OAuth client ID | STORE_CHROME_CLIENT_ID | The alternative to the service account |
| OAuth client secret | STORE_CHROME_CLIENT_SECRET | |
| OAuth refresh token | STORE_CHROME_REFRESH_TOKEN |
Add them from Stores, New, Chrome in the console.
Submitting
Submit from the Stores tab, or over the API:
curl -s -X POST https://www.extension.dev/api/cli/stores/submit \
-H "Authorization: Bearer $EXTENSION_DEV_TOKEN" \
-d '{"browsers":["chrome"],"buildSha":"<sha>","channel":"stable"}'Staged rollouts
Staged publish is first class. Enable it in the project's Chrome store settings with a deploy percentage from 1 to 100; the submission then carries publishType STAGED_PUBLISH.
Raise a published rollout from the Stores tab. The raise is review free, and the new percentage must be higher than the current one.
WARNING
Without staged publish enabled the submission publishes to everyone at once, and there is no rollout to raise.
Pulling a submission back
A pending submission can be pulled back out of review from the Stores tab. It applies only while the submission is still in review.
Safe mode
Draft-only safe mode uploads the package as a draft and submits nothing for review. It is a per-store setting, and agents default to safe. Chrome also supports requesting the expedited review exemption (skipReview) as a store setting.
Watching
The Stores tab follows the submission to a terminal state: in_review, processing, published, rejected, failed. The same status returns from GET /api/projects/{id}/stores/status. Chrome needs no submission id, unlike Firefox and Edge.
When it fails
- The preflight,
dryRunon the submit call, names the blocked reason and the exact console page that fixes it inconsoleUrl. - A missing or malformed publisher ID fails preflight. It is required and it is a UUID, not the extension ID.
- An OAuth refresh token minted for another Google account uploads to the wrong publisher or fails authorization. Re-enter the Chrome credentials in the project's store settings.
- A rejected version stays visible in the store status as
rejected. Fix the package and submit again; pulling back applies only while review is pending.
Last verified against Chrome Web Store API v2 on 2026-07-27. Submission outcomes are subject to Chrome Web Store review and policy.
Next
- Publishing overview for the three ways in and
STORE.md - HTTP API for the submit and status endpoints
