Skip to main content

In-App Purchases

List

ascelerate iap list <bundle-id>
ascelerate iap list <bundle-id> --type consumable --state approved

Filter values are case-insensitive. Types: CONSUMABLE, NON_CONSUMABLE, NON_RENEWING_SUBSCRIPTION. States: APPROVED, MISSING_METADATA, READY_TO_SUBMIT, WAITING_FOR_REVIEW, IN_REVIEW, etc.

Details

ascelerate iap info <bundle-id> <product-id>
ascelerate iap promoted <bundle-id>

Create, update, and delete

ascelerate iap create <bundle-id> --name "100 Coins" --product-id <product-id> --type CONSUMABLE
ascelerate iap update <bundle-id> <product-id> --name "100 Gold Coins"
ascelerate iap delete <bundle-id> <product-id>

Submit for review

ascelerate iap submit <bundle-id> <product-id>

Localizations

ascelerate iap localizations view <bundle-id> <product-id>
ascelerate iap localizations export <bundle-id> <product-id>
ascelerate iap localizations import <bundle-id> <product-id> --file iap-de.json

The import command creates missing locales automatically with confirmation, so you can add new languages without visiting App Store Connect.

Pricing

iap pricing reads and writes the price schedule. The schedule has a single base territory — the territory Apple uses to auto-equalize prices in every other territory — plus zero or more per-territory manual overrides.

# Show the current price schedule (warns if none is set yet)
ascelerate iap pricing show <bundle-id> <product-id>

# List all price tiers available in a territory
ascelerate iap pricing tiers <bundle-id> <product-id> --territory USA

Set the base territory price

ascelerate iap pricing set <bundle-id> <product-id> --price 4.99
ascelerate iap pricing set <bundle-id> <product-id> --price 4.99 --base-territory GBR

--base-territory defaults to the existing base territory (or USA on a brand-new schedule). When the schedule has per-territory manual overrides, set shows an interactive menu offering to revert any of them to auto-equalize from the new base. To wipe all overrides without the prompt, pass --remove-all-overrides.

Per-territory overrides

# Add or update a manual override
ascelerate iap pricing override <bundle-id> <product-id> --price 5.99 --territory FRA

# Drop the override (territory reverts to auto-equalize from base)
ascelerate iap pricing remove <bundle-id> <product-id> --territory FRA

override and remove only operate on non-base territories. To change the base territory's price, use set.

When an IAP has no price schedule, iap info and iap pricing show both surface a warning, and the apps review preflight command flags it as a blocker for submission.

Availability

Each IAP has its own territory availability, independent of the app's. By default an IAP inherits its app's territories; once you call iap availability with changes, the IAP has an explicit list.

# View current per-IAP territories
ascelerate iap availability <bundle-id> <product-id>

# Edit the territory list (wholesale POST replaces the full list)
ascelerate iap availability <bundle-id> <product-id> --add CHN,RUS
ascelerate iap availability <bundle-id> <product-id> --remove ITA
ascelerate iap availability <bundle-id> <product-id> --available-in-new-territories true

Offer codes

Offer codes are redeemable codes that unlock a one-time discount on an IAP. They come in two flavors, managed under the same offer code resource:

  • One-time-use codes: Apple generates N unique codes in a batch. Each can only be redeemed once. Codes are generated asynchronously.
  • Custom codes: developer-supplied string (e.g. PROMO2026) redeemable N times.
# List all offer codes on an IAP
ascelerate iap offer-code list <bundle-id> <product-id>

# Show details + code batch counts for one offer code
ascelerate iap offer-code info <bundle-id> <product-id> <offer-code-id>

# Create an offer code with a discounted price (auto-equalized across all territories)
ascelerate iap offer-code create <bundle-id> <product-id> \
--name "Launch Promo" \
--eligibility NON_SPENDER,ACTIVE_SPENDER \
--price 0.99 --territory USA --equalize-all-territories

# Activate or deactivate
ascelerate iap offer-code toggle <bundle-id> <product-id> <offer-code-id> --active true

# Generate a batch of one-time-use codes (codes are generated asynchronously)
ascelerate iap offer-code gen-codes <bundle-id> <product-id> <offer-code-id> \
--count 100 --expires 2026-12-31

# Fetch the actual code values after generation completes
ascelerate iap offer-code view-codes <one-time-use-batch-id> --output codes.txt

# Add a developer-supplied custom code
ascelerate iap offer-code add-custom-codes <bundle-id> <product-id> <offer-code-id> \
--code PROMO2026 --count 1000 --expires 2026-12-31

Customer eligibilities for IAP offer codes: NON_SPENDER, ACTIVE_SPENDER, CHURNED_SPENDER.

Promotional images

Upload promotional artwork shown alongside the IAP in the App Store.

ascelerate iap images list <bundle-id> <product-id>
ascelerate iap images upload <bundle-id> <product-id> ./hero.png
ascelerate iap images delete <bundle-id> <product-id> <image-id>

Uploads use Apple's 3-step flow: reserve with fileSize + fileName, PUT file chunks to presigned URLs, then PATCH with the file MD5 to commit. The CLI handles all three steps in a single upload call.

App Review screenshot

Each IAP can have at most one App Review screenshot (shown to Apple's reviewers). Uploading replaces any existing one.

ascelerate iap review-screenshot view <bundle-id> <product-id>
ascelerate iap review-screenshot upload <bundle-id> <product-id> ./review.png
ascelerate iap review-screenshot delete <bundle-id> <product-id>