About asc-promoted-purchases
asc-promoted-purchases is a skill for managing promoted in-app purchases on App Store product pages. It lets app developers list, create, update, and delete promotions, while suppressing mutation options when review status makes them conflict-prone.
Key features
- 01Lists an app's promoted purchases
- 02Promotes an IAP or auto-renewable subscription
- 03Sets visibility and enabled state
- 04Updates or deletes promotions
- 05Restricts actions based on review state
Use cases
- 01Inspect an app's current promoted purchases
- 02Feature an IAP or subscription on a product page
- 03Avoid disallowed updates or deletions during review
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ tddworks/ asc-cli-skills --skill asc-promoted-purchasesAfter installing, type/asc-promoted-purchasesin Claude Code to confirm it loaded.
Details
From the project READMEasc Promoted Purchases
Manage App Store product page Promoted In-App Purchases — the featured IAPs / auto-renewable subscriptions surfaced under an app's product page on the App Store. Each slot promotes either an IAP or a subscription (mutually exclusive) and goes through App Review separately from the underlying product.
List
asc promoted-purchases list --app-id <APP_ID> [--limit N] [--pretty]
Create
Exactly one of --iap-id or --subscription-id is required (the command validates and rejects both/neither):
# Promote an in-app purchase
asc promoted-purchases create --app-id <APP_ID> --iap-id <IAP_ID> --visible --enabled
# Promote an auto-renewable subscription
asc promoted-purchases create --app-id <APP_ID> --subscription-id <SUB_ID> --hidden --disabled
--visible / --hidden flip isVisibleForAllUsers. --enabled / --disabled flip isEnabled. Defaults: isVisibleForAllUsers=true, isEnabled left unchanged when both flags omitted.
Update
asc promoted-purchases update --promoted-id <PROMOTED_ID> [--visible | --hidden] [--enabled | --disabled]
Omitting a flag pair leaves that field unchanged.
Delete
asc promoted-purchases delete --promoted-id <PROMOTED_ID>
State semantics
PromotedPurchaseState exposes semantic booleans:
| Boolean | True when state is |
|---|---|
isLocked | WAITING_FOR_REVIEW, IN_REVIEW |
isApproved | APPROVED |
State-aware affordances
JSON responses suppress mutations that ASC would reject as 409 conflicts:
| State | update link | delete link |
|---|---|---|
approved / rejected / prepareForSubmission / developerActionNeeded | shown | shown |
waitingForReview / inReview (i.e. state.isLocked) | suppressed | suppressed |
{
"affordances": {
"listSiblings": "asc promoted-purchases list --app-id <APP_ID>",
"update": "asc promoted-purchases update --promoted-id <ID>", // omitted while in review
"delete": "asc promoted-purchases delete --promoted-id <ID>" // omitted while in review
}
}
Resolve App ID
See project-context.md — check .asc/project.json before asking the user or running asc apps list.
Typical Workflow
APP_ID=$(cat .asc/project.json 2>/dev/null | jq -r '.appId // empty')
# Promote an IAP, visible to all users, slot enabled.
PROMO_ID=$(asc promoted-purchases create --app-id "$APP_ID" \
--iap-id "iap-1" --visible --enabled \
| jq -r '.data[0].id')
# Later: hide it temporarily without deleting
asc promoted-purchases update --promoted-id "$PROMO_ID" --hidden
# Or just remove the slot
asc promoted-purchases delete --promoted-id "$PROMO_ID"
Reference
For full domain-model and REST detail see docs/features/promoted-purchases.md.