> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appeeky.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit an App Store version for review

> Create a version, write metadata per locale, attach a build, fill in App Review details, submit, and release with appstore.

Set the app once so the commands stay short:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
export ASC_APP_ID=1234567890   # or pass --app com.example.app on each command
```

**1. Create the version**

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
appstore versions create 2.4.0 --platform IOS --release-type MANUAL --confirm
appstore versions list --state PREPARE_FOR_SUBMISSION
```

Note the version id. `--release-type` is `MANUAL`, `AFTER_APPROVAL`, or `SCHEDULED` (with `--release-date`). `--build BUILD_ID` attaches a build right away.

**2. Write metadata per locale**

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
appstore versions localizations VERSION_ID
appstore versions set-localization VERSION_ID en-US \
  --whats-new "Faster sync and a new widget." \
  --promotional-text "Now with widgets." \
  --keywords "sync,widget,notes" \
  --confirm
```

`set-localization` updates the locale if it exists and creates it otherwise. Keywords are comma-separated and limited to 100 bytes.

**3. Attach a build**

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
appstore builds list --marketing-version 2.4.0 --state VALID
appstore builds encryption BUILD_ID --uses-non-exempt-encryption false --confirm
appstore versions attach-build VERSION_ID BUILD_ID --confirm
```

**4. Fill in App Review details**

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
appstore versions set-review-details VERSION_ID \
  --first-name Ada --last-name Lovelace --phone "+1 555 0100" --email review@example.com \
  --demo-required false --notes "Sign in is optional." \
  --confirm
```

Use `--demo-user` and `--demo-password` when the reviewer needs an account.

**5. Submit**

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
appstore submit VERSION_ID --confirm
appstore submissions list --state WAITING_FOR_REVIEW,IN_REVIEW
```

`submit` reuses an open review submission for the app and platform (or creates one), adds the version, and submits it. If Apple refuses, the error lists each missing field from Apple's `associatedErrors`.

## Version metadata flags

| `versions set-localization` flag | Field |
| - | - |
| `--description <text>` | Description |
| `--keywords <text>` | Keywords (comma-separated, max 100 bytes) |
| `--whats-new <text>` | What's New |
| `--promotional-text <text>` | Promotional text |
| `--marketing-url <url>` | Marketing URL |
| `--support-url <url>` | Support URL |

App-level fields live on the app info, not the version:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
appstore apps infos
appstore apps set-localization APP_INFO_ID en-US --name "My App" --subtitle "Notes that sync" --confirm
appstore apps set-categories APP_INFO_ID --primary PRODUCTIVITY --confirm
appstore apps age-rating APP_INFO_ID
```

## Release

**Manual release**

With `--release-type MANUAL`, release once the version is Pending Developer Release:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
appstore release VERSION_ID --confirm
```

**Phased release**

Roll the update out to automatic-update users over 7 days:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
appstore phased-release start VERSION_ID --confirm      # starts at release
appstore phased-release get VERSION_ID
appstore phased-release pause VERSION_ID --confirm
appstore phased-release resume VERSION_ID --confirm
appstore phased-release complete VERSION_ID --confirm   # release to everyone now
appstore phased-release delete VERSION_ID --confirm     # turn off before it starts
```

`start --active` starts the phased release immediately instead of at release.

## Submissions in detail

`submit` covers the common case. For other reviewable items (in-app events, custom product pages) build the submission yourself:

```bash theme={"theme":{"light":"github-light","dark":"github-dark"}}
appstore submissions create --platform IOS --confirm
appstore submissions add-item SUBMISSION_ID ITEM_ID --kind appEvent --confirm
appstore submissions items SUBMISSION_ID
appstore submissions submit SUBMISSION_ID --confirm
appstore submissions cancel SUBMISSION_ID --confirm
```

## Over MCP

| Step | Tool |
| - | - |
| Create the version | `appstore_create_version` |
| Metadata | `appstore_list_version_localizations`, `appstore_create_version_localization`, `appstore_update_version_localization` |
| Build | `appstore_list_builds`, `appstore_update_build`, `appstore_attach_build` |
| Review details | `appstore_get_review_details`, `appstore_create_review_details`, `appstore_update_review_details` |
| Submit | `appstore_submit_version` (one step) or `appstore_create_review_submission` → `appstore_add_review_submission_item` → `appstore_submit_review_submission` |
| Release | `appstore_release_version`, `appstore_create_phased_release`, `appstore_update_phased_release` |

On the hosted server, all of these except reads need `X-ASC-Allow-Writes: true`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.