Microsoft Edge Add-ons
Edge submissions go through the Partner Center API v1.1. Reach for this page when you set up the Edge credentials or decide whether a submission stops at the draft or goes to Microsoft review.
Quick start
curl -s -X POST https://www.extension.dev/api/cli/stores/submit \
-H "Authorization: Bearer $EXTENSION_DEV_TOKEN" \
-H "Content-Type: application/json" \
-d '{"browsers":["edge"],"buildSha":"<sha>","channel":"stable"}'The platform uploads the Edge build artifact, edge.zip, with the project's stored credentials and records the outcome under Submissions. The same submission starts from the console's Submissions tab or from an agent with extension_submit.
How it works
Credentials
Requests authenticate with two headers, Authorization: ApiKey and X-ClientID. Both values come from the Partner Center API settings. Add them in the console under Project settings, Store publishing, Microsoft Edge Add-ons, with the product ID of the listing.
The flow
The platform uploads a draft package, polls the upload operation until it leaves InProgress, then submits the draft for review. Edge tracks the submission by the operation id the upload returns, never by a version id.
Upload without publishing
Draft-only safe mode uploads the package to the Edge draft and leaves it there. No review submission happens. It is a per-store setting: turn off Submit draft after upload in the Edge panel under Project settings, Store publishing, which stores publishAfter: false.
Agent and API submissions default to the draft. extension_submit defaults to a dry run. A submission with dryRun: false through the MCP, the CLI or an API token stops at the Edge draft unless the store settings state a mode.
An explicit publishAfter: true goes to Microsoft review and an explicit publishAfter: false stays a draft, whoever saved it. Console submissions follow the store setting: review unless Submit draft after upload is off.
Certification notes
Edge certification notes are read from STORE.md in the project root and submitted automatically. See Publishing.
Watching
The Submissions tab follows the submission to a terminal state, and GET /api/projects/{id}/stores/status returns the same. The states are the eight on Publishing. An upload that is not published for review records draft, not submitted.
Reference
Secrets
| Value | Secret | Notes |
|---|---|---|
| Client ID | STORE_EDGE_CLIENT_ID | Partner Center API settings, sent as X-ClientID |
| API key | STORE_EDGE_CLIENT_SECRET | Partner Center API settings, sent as ApiKey |
Store settings
| Setting | Stored as | Effect |
|---|---|---|
| Product ID | storeId | The product under /v1/products/{productId} |
| Submit draft after upload | publishAfter | true submits the draft for review, false leaves it as a draft |
Store calls
| Step | Call |
|---|---|
| Upload | POST /v1/products/{productId}/submissions/draft/package, operation id in Location |
| Poll | GET /v1/products/{productId}/submissions/draft/package/operations/{operationId} |
| Submit | POST /v1/products/{productId}/submissions |
When it fails
- The upload operation failed. The upload is asynchronous. A failed operation reports its errors when polled, and the submit step never ran.
- Authentication fails. That is the header pair, not the package. Confirm the client ID and API key both come from the same Partner Center account.
- A store is blocked. The preflight,
dryRunon the submit call, reports credential health per store and the console page that fixes a blocked one. - A submission sits in
pending. It is still on Microsoft's side. Give it time before assuming failure.
Next
- Publishing for the three doors, dry runs and
STORE.md - HTTP API for the submit and status endpoints
- Action Locales template to localize the popup text with the browser language