Skip to content

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.

ValueSecretNotes
Service account JSONSTORE_CHROME_SERVICE_ACCOUNT_JSONRaw JSON, sufficient alone
OAuth client IDSTORE_CHROME_CLIENT_IDThe alternative to the service account
OAuth client secretSTORE_CHROME_CLIENT_SECRET
OAuth refresh tokenSTORE_CHROME_REFRESH_TOKEN

Add them from Stores, New, Chrome in the console.

Submitting

Submit from the Stores tab, or over the API:

bash
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, dryRun on the submit call, names the blocked reason and the exact console page that fixes it in consoleUrl.
  • 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